为什么我在for循环中得到奇怪的增量?

时间:2015-03-03 16:34:37

标签: javascript for-loop increment

我一直在测试检查字符串中单个字符的数值的方法。我设置了一个遍历它们的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 0Looping 1的其他内容,但我不认为是这种情况。

如果有人可以请求帮助,这真的很烦我,我似乎无法解决它。

提前致谢。

7 个答案:

答案 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)在连接之前首先作为加法发生,因此输出就是你所期望的。