Javascript for循环索引被无故转换为字符串

Javascript for循环索引被无故转换为字符串,javascript,Javascript,我在用JavaScript编写代码,发现了这种奇怪的行为,我无法解释 for (i in bubbles){ bubbles[i].string = "some stuff!" // <- no errors here results[0] = i - 1 results[1] = i + 1 results[2] = parseInt(i) + 1 } 这可能吗?!可能是由于代码中的其他错误。我试图隔离上面的案例,但是,如果您需要,下面是全部代码 for (i in bub

我在用JavaScript编写代码,发现了这种奇怪的行为,我无法解释

for (i in bubbles){

bubbles[i].string = "some stuff!" // <- no errors here

results[0] = i - 1 
results[1] = i + 1
results[2] = parseInt(i) + 1 


}
这可能吗?!可能是由于代码中的其他错误。我试图隔离上面的案例,但是,如果您需要,下面是全部代码

for (i in bubbles){

            if (bubbles[i].check()){

                // define which boubble has been clicked and start dragging
                bubbleDrag[2] = bubbles[i].check();
                bubbleDrag[1] = i;
                bubbleDrag[0] = true;

                // define where to check to avoid overlapping dates
                if (i != 0 && i < bubbles.length - 1){

                    bubbleDrag[3] = i - 1;
                    bubbleDrag[4] = i + 1;

                } else if (i == 0 && bubbles.lenght > 1){

                    bubbleDrag[3] = i + 1;

                } else if (i == bubbles.lenght - 1){

                    bubbleDrag[3] = i - 1;

                }

            }

        }
for(气泡中的i){
if(气泡[i].check()){
//定义已单击的boubble并开始拖动
bubbleDrag[2]=气泡[i]。检查();
泡泡布[1]=i;
bubbleDrag[0]=真;
//定义检查位置以避免日期重叠
如果(i!=0&&i1){
气泡碎片[3]=i+1;
}else if(i==bubbles.lenght-1){
泡泡布[3]=i-1;
}
}
}

Javascript正在解释您的代码

results[0] = i - 1 
// string minus number, so javascript "assumes" you want "i" as a number

results[1] = i + 1 
// string concatenate with a number, so javascript assumes you want a concatenated string
更多的例子

"30" - 10; // echoes number 20
"30" + 10; // echoes string "3010"

有些人喜欢这种语言,有些人不喜欢。我发现自己是后者。在我看来,string+number应该抛出一个错误,因为意图并不明确。松散/不严格的解释可能最终导致意外结果。如果你阅读了Douglas Crockford的一些代码,你会注意到他使用了广泛严格的类型比较(==,!==),这就是部分原因。

什么是
气泡
?JavaScript中的
for-in
循环旨在迭代对象
{}
,而不是数组
[]
。迭代器变量将始终是字符串。在
for…In
循环中,循环变量始终是字符串,因为您正在迭代对象属性。如果要在数组上迭代,请使用正常的
for
循环。请参见和。气泡是一个对象数组……您应该使用for循环:
for(var i=0;我不知道,谢谢!
"30" - 10; // echoes number 20
"30" + 10; // echoes string "3010"