奇怪的 JavaScript 运算符

发布于 2024-11-01 14:01:08 字数 406 浏览 2 评论 0原文

我与操作员之间有一个小问题。我有一个数字,根据按键输入加或减。奇怪的是,运算符 += 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;
}

I'm having a little problem with an operator. I have a number which is either plussed or subtracted depending on key input. The weird thing is that the operators += 1 and += 11 adds the numbers literally to the static number: 60 becomes 601 and 6011 instead of 61 and 71.

Here is the code, so take into consideration that the static number is 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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半衾梦 2024-11-08 14:01:08

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

-= 之所以有效,是因为它只有一个函数(使用 Math 进行减法),因此 boxId 在运算之前会先转换为数字。 + 在 JavaScript 中被重载,表示“字符串连接或数学加法”,因此如果 boxId 是字符串,它就会执行字符串操作。

boxId is a string in your case. Convert it to a number first using parseInt(boxId) or just boxId << 0

The reason -= works is because it only has one function (subtract using Math), so boxId is cast to a number before the operation. + is overloaded in JavaScript to mean "string concatenation OR Math addition", so if boxId is a string, it does string ops.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文