2011-04-14 69 views
1

我遇到了一个操作符的问题。我有一个数字,可以根据键盘输入加上或减去。奇怪的是,运算符+ = 1和+ = 11将数字逐字地添加到静态数字:60变为601和6011而不是61和71.奇怪的JavaScript运算符

这里是代码,所以要考虑静态数字是60:

switch(e.keyCode) { 
    case 37: 
     boxID -= 1; 
     break; 
    case 38: 
     boxID -= 11; 
     break; 
    case 39: 
     boxID += 1; // Becomes 601 
     break; 
    case 40: 
     boxID += 11; // Becomes 6011 
     break; 
} 
+1

你如何定义boxID? javascript runtime认为它是一个字符串 – Jason 2011-04-14 01:55:57

+0

我定义了这样的boxID,其中ID是列表项的数字60: 'var boxID = $('li.selected')。attr('id');' – Jonathan 2011-04-14 01:57:51

+1

然后cvolves advice var boxId = parseInt($(“li.selected”)。attr(“id”)) – Jason 2011-04-14 01:59:05

回答

11

boxId是你的情况中的字符串。它转换为数字首先使用parseInt(boxId)或只是boxId << 0

原因-=作品是因为它只有一个功能(减去使用数学),所以boxId在操作之前转换为数值。 +在JavaScript中重载意味着“字符串连接或数学加法”,所以如果boxId是一个字符串,它会执行字符串操作。

+0

你的建议工作得很好。谢谢。 – Jonathan 2011-04-14 02:00:12

+3

请记住使用可选的radix参数,而不是'parseInt(boxId,10)'。这使得“010”不被视为八进制数。 – hugomg 2011-04-14 02:07:30

+1

+1我总是喜欢在Javascript中看到位移;) – 2011-04-14 06:23:44