为什么我的 for 循环中出现奇怪的增量?
Why am I getting weird increments in my for loop?
我一直在测试检查字符串中单个字符的数值的方法。我设置了一个遍历它们的 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
的其他内容,但我认为情况并非如此。
如果有人能帮忙,这真的很烦我,我似乎无法解决它。
提前致谢。
你的意思是console.log("Looping " + (i+1));
“1”作为字符串附加。
console.log("Looping " + i+1);
从左到右解析为 ("Looping " + i) + 1
。在正确的位置添加括号,它应该可以工作:
console.log("Looping " + (i+1));
问题出在您进行实际日志记录的行中:
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));
}
},
您是在连接字符串,而不是添加数字。首先,i
的值被强制转换为字符串并连接到 Looping
,结果是 Looping 0
。然后,数字 1
被转换为字符串并连接起来,结果就是您所看到的:Looping 01
.
要获得您想要的结果,只需将 i+1
放在括号中即可。
console.log("Looping " + (i+1));
+
是 left-to-right associative。表达式被计算为
('Looping ' + i) + 1
现在是否更清楚为什么要执行字符串连接?如果 +
操作的两个操作数中的 any 是字符串,则执行字符串连接。 'Looping '
是一个字符串,因此 'Looping ' + i
结果是一个字符串。
要更改优先级或关联性,您必须使用分组 "operator" ((...)
)。
他们加括号是对的,整个代码是:
isNumeric: function(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + (i+1));
}
},
将您的结果与此进行比较:
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
首先发生,我被强制转换为字符串值以与 "Looping " 连接。 1
也被转换为用于串联的字符串值。通过在 i+1
周围放置括号,我们可以强制 (i+1)
在连接之前首先作为加法发生,因此输出是您所期望的。
我一直在测试检查字符串中单个字符的数值的方法。我设置了一个遍历它们的 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
的其他内容,但我认为情况并非如此。
如果有人能帮忙,这真的很烦我,我似乎无法解决它。
提前致谢。
你的意思是console.log("Looping " + (i+1));
“1”作为字符串附加。
console.log("Looping " + i+1);
从左到右解析为 ("Looping " + i) + 1
。在正确的位置添加括号,它应该可以工作:
console.log("Looping " + (i+1));
问题出在您进行实际日志记录的行中:
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));
}
},
您是在连接字符串,而不是添加数字。首先,i
的值被强制转换为字符串并连接到 Looping
,结果是 Looping 0
。然后,数字 1
被转换为字符串并连接起来,结果就是您所看到的:Looping 01
.
要获得您想要的结果,只需将 i+1
放在括号中即可。
console.log("Looping " + (i+1));
+
是 left-to-right associative。表达式被计算为
('Looping ' + i) + 1
现在是否更清楚为什么要执行字符串连接?如果 +
操作的两个操作数中的 any 是字符串,则执行字符串连接。 'Looping '
是一个字符串,因此 'Looping ' + i
结果是一个字符串。
要更改优先级或关联性,您必须使用分组 "operator" ((...)
)。
他们加括号是对的,整个代码是:
isNumeric: function(n){
for(var i = 0; i < n.length; i++){
console.log("Looping " + (i+1));
}
},
将您的结果与此进行比较:
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
首先发生,我被强制转换为字符串值以与 "Looping " 连接。 1
也被转换为用于串联的字符串值。通过在 i+1
周围放置括号,我们可以强制 (i+1)
在连接之前首先作为加法发生,因此输出是您所期望的。