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

IT技术 javascript math
2021-01-11 00:43:35

为什么当我使用这个时:(假设i = 1

divID = "question-" + i+1;

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

6个回答

改用这个:

var divID = "question-" + (i+1)

这是一个相当普遍的问题,不仅仅发生在 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".
@IlyaD -运算符优先级相关运算符是从左到右处理的加法。所以它正在做这样的事情:divID = ("question-" + i) + 1;
2021-03-20 00:43:35
刚才我很惊讶地发现这不起作用: console.log('Add City Row: '+(i+1)); 即使括号中的数学,它也将它们连接起来。
2021-03-23 00:43:35
成功了,谢谢!但你能告诉我有什么区别吗?
2021-03-26 00:43:35
很好地说明了为什么会发生这种情况。
2021-04-01 00:43:35
这在我的情况下有效,例如“问题”+(i+j)它假定两个变量都是字符串,最好将下面的解决方案作为“问题-”+(i*1+j)
2021-04-09 00:43:35

你也可以使用这个

divID = "question-" + (i*1+1); 

以确保i转换为整数。

仅使用:

divID = "question-" + parseInt(i) + 1;

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

var n = "1"; //type is string
var frstCol = 5;
lstCol = frstCol + parseInt(n);

如果“n”是整数,则不需要转换。

n = 1; //type is int
var frstCol = 5, lstCol = frstCol + n;
这个答案是完全错误的。并且parseInt不应该用数字来调用。
2021-03-23 00:43:35
如果有的话,语法应该包括parseInt(i, 10). 我不明白这个直到今天仍然完全错误的答案如何得到 21 票的。
2021-03-23 00:43:35
唯一对我有用的解决方案,那些括号的东西在我的情况下不起作用。
2021-04-01 00:43:35
这个答案是非常错误的。问题仍然是串联和加法是左结合的即:"question-" + parseInt(i) + 1 === ("question-" + parseInt(i)) + 1有关更多详细信息,请参阅 Joachim 的回答。此外,(+i)parseInt(i)
2021-04-07 00:43:35
语法应该是: divID = "question-" + (parseInt(i) + 1)
2021-04-11 00:43:35

由于您将数字连接到字符串上,因此整个内容都被视为字符串。当您想将数字加在一起时,您需要单独进行并将其分配给一个 var 并使用该 var,如下所示:

i = i + 1;
divID = "question-" + i;

或者您需要像这样指定数字加法:

divID = "question-" + Number(i+1);

编辑

我早就应该添加这个,但根据评论,这也有效:

divID = "question-" + (i+1);
这非常适合我的需求。我有一个从文本输入分配的变量,而不是字符串文字。我在Number最初分配变量时使用,然后它不会导致其他东西被转换为字符串。
2021-03-31 00:43:35
是的,看到这里的其他答案,我意识到了这一点。我肯定不是 js 大师。我以为您必须使用 Number 进行加法运算,但我应该知道。JS 似乎能够“弄清楚”,这是该语言非常酷的方面之一。感谢您的评论。
2021-04-01 00:43:35
Number不是必需的,只是括号。
2021-04-04 00:43:35
divID = "question-" + parseInt(i+1,10);

在这里检查,这是一个 JSFiddle

永远不要parseInt用数字打电话,只用字符串。parseInt(1e100) === 1.
2021-03-13 00:43:35
+1,在我自己的项目中遇到了很多整数问题,所以我现在使用 parseInt 太多了,呵呵
2021-03-16 00:43:35
您不需要parseInt,只需要数字周围的括号。jsfiddle.net/J8rvy
2021-03-29 00:43:35