Javascript(+)符号连接而不是给出变量的总和

ily*_*lyo 74 javascript math

为什么当我使用它:(假设i = 1)

divID = "question-" + i+1;
Run Code Online (Sandbox Code Playgroud)

我得到问题11而不是问题2

Joa*_*uer 72

请改用:

var divID = "question-" + (i+1)
Run Code Online (Sandbox Code Playgroud)

这是一个相当普遍的问题,并不仅仅发生在JavaScript中.这个想法是,+可以代表两个串联和补充.

由于+运算符将从左到右处理,因此代码中的决策如下所示:

  • "question-" + i:既然"question-"是一个字符串,我们将进行连接,从而产生"question-1"
  • "question-1" + 1:既然"queston-1"是一个字符串,我们将进行连接,从而产生"question-11".

随着"question-" + (i+1)它的不同:

  • 由于(i+1)它在括号中,因此必须在第一个+应用之前计算其值:
    • i是数字,1是数字,所以我们将做加法,结果2
  • "question-" + 2:既然"question-"是一个字符串,我们将进行连接,从而产生"question-2".


Ser*_*eim 34

你也可以用这个

divID = "question-" + (i*1+1); 
Run Code Online (Sandbox Code Playgroud)

确保i转换为整数.


ede*_*tes 18

仅限使用:

divID = "question-" + parseInt(i) + 1;
Run Code Online (Sandbox Code Playgroud)

当"n"来自html输入字段或声明为字符串时,您需要使用显式转换.

var n = "1"; //type is string
var frstCol = 5;
lstCol = frstCol + parseInt(n);
Run Code Online (Sandbox Code Playgroud)

如果"n"是整数,则不需要转换.

n = 1; //type is int
var frstCol = 5, lstCol = frstCol + n;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案非常错误.问题仍然是连接和添加是*左关联*.那就是:``question-"+ parseInt(i)+ 1 ===("question-"+ parseInt(i))+ 1`.有关更多详细信息,请参阅Joachim的答案.另外,`(+ i)`比`parseInt(i)`更简洁 (4认同)
  • 这个答案是完全错误的.并且`parseInt`不应该用数字来调用. (2认同)

Tim*_*bbs 8

由于您将数字连接到字符串,因此整个事物被视为字符串.如果要将数字组合在一起,则需要单独执行此操作并将其分配给var并使用该var,如下所示:

i = i + 1;
divID = "question-" + i;
Run Code Online (Sandbox Code Playgroud)

或者您需要指定数字加法,如下所示:

divID = "question-" + Number(i+1);
Run Code Online (Sandbox Code Playgroud)

编辑

我应该在很久以前添加这个,但根据评论,这也有效:

divID = "question-" + (i+1);
Run Code Online (Sandbox Code Playgroud)

  • 不需要`Number`,只是parens. (3认同)