奇怪的JavaScript运营商

Jon*_*han 1 javascript jquery operators

我对操作员有一点问题.我有一个加号或减号的数字,具体取决于键输入.奇怪的是,运算符+ = 1和+ = 11将数字字面上添加到静态数字:60变为601和6011而不是61和71.

这是代码,因此请考虑静态数为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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ahn 11

boxId在你的情况下是一个字符串.首先使用parseInt(boxId)或仅将其转换为数字boxId << 0

之所以-=有效是因为它只有一个函数(使用Math减去),所以boxId在操作之前强制转换为数字. +在JavaScript中重载意味着"字符串连接或数学添加",所以如果boxId是一个字符串,它会执行字符串操作.

  • 记得使用可选的radix参数并改为使用`parseInt(boxId,10)`.这使得"010"被视为八进制数. (3认同)