我正在用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
}
当i = 1
发生这种情况时
results[0] -> 0
results[1] -> 11
results[2] -> 2
这甚至可能吗?!也许这是由于代码中的其他错误。我试图隔离上面的情况但是,如果你需要它,这里是整个代码
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;
}
}
}
答案 0 :(得分: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"
有些人喜欢这种语言这样解释,有些则不喜欢。我发现自己在后者。 IMO,字符串+数字应该抛出错误,因为意图不明确。松散/非严格的解释可能最终导致意外结果。如果您阅读道格拉斯·克罗克福德的一些代码,您会发现他使用了广泛严格的类型比较(===,!==),这也是原因的一部分。