我一直在测试检查字符串中单个字符的数值的方法。我设置了一个遍历它们的for循环,但是当我将它记录到控制台时,我得到一个奇怪的回应:
isNumeric: function(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + i+1);
}
},
所以我传入了值"10"
来测试它。当我调用函数时,我得到一个奇怪的响应。我在控制台上有两个日志(如预期的那样),但它说
Looping 01
Looping 11
这里发生了什么?我不认为我在这里结束字符串,但出于某种原因它认为我是?我将i声明为整数var i = 0;
,当你将它递增1时,它在做什么?
我认为它必须做的唯一其他事情是记录附加到Looping 0
和Looping 1
的其他内容,但我不认为是这种情况。
如果有人可以请求帮助,这真的很烦我,我似乎无法解决它。
提前致谢。
答案 0 :(得分:2)
你的意思是console.log("Looping " + (i+1));
&#34; 1&#34;被作为字符串附加。
答案 1 :(得分:2)
+
是left-to-right associative。表达式评估为
('Looping ' + i) + 1
现在更清楚为什么执行字符串连接?如果+
操作的两个操作数中的任何是字符串,则执行字符串连接。 'Looping '
是一个字符串,因此'Looping ' + i
会生成一个字符串。
要更改优先级或关联性,您必须使用分组“运算符”((...)
)。
答案 2 :(得分:1)
console.log("Looping " + i+1);
从左到右解析为("Looping " + i) + 1
。在正确的位置添加括号,它应该工作:
console.log("Looping " + (i+1));
答案 3 :(得分:1)
您正在连接字符串,而不是添加数字。首先,i
的值会转换为字符串并连接到Looping
,从而生成Looping 0
。然后,数字1
会转换为字符串并连接在一起,从而产生您所看到的内容:Looping 01
。
要获得所需的结果,您只需将i+1
放在括号中即可。
console.log("Looping " + (i+1));
答案 4 :(得分:0)
问题在于您进行实际记录的行:
console.log("Looping " + i+1);
首先发生"Looping " + i
。
由于"Looping"
是一个字符串,i
会被强制转换为字符串并附加到"Looping"
。
结果:
"Looping 0"
然后,1
以相同的方式添加。
"Looping 01"
如果您想阻止这种情况发生,请使用括号,如下所示:
isNumeric: function(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + (i+1));
}
},
答案 5 :(得分:0)
他们添加括号是正确的,整个代码将是:
isNumeric: function(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + (i+1));
}
},
答案 6 :(得分:0)
将您的结果与此比较:
n=[1,2,3,4]
function isnum(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + i+1);
console.log("Looping " + (i+1));
}
}
isnum(n);
这会生成输出:
Looping 01
Looping 1
Looping 11
Looping 2
Looping 21
Looping 3
Looping 31
Looping 4
在语句"Looping " + i+1
中发生的事情是"Looping " + i
首先发生,我被强制转换为串联的字符串值与“循环”。 1
也被强制转换为串联的字符串值。通过在i+1
周围放置一些parens,我们可以强制(i+1)
在连接之前首先作为加法发生,因此输出就是你所期望的。