2011-04-14 100 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