var xs=[]; for (var i in [1,2,3]) xs.push(i); console.log(xs);
为什么["0", "1", "2"]
而不是[0, 1, 2]
?
我有预感,这是由于阵列内部实现。
javascript中的数组可能被视为{"0":1, "1":2, "2":3}
?
编辑:我写了一个编译器。我不在乎我不需要使用for in
和数组。我不关心线路的可读性。我想知道为什么数组对象的键是字符串而不是数字。任何来自规范的声明都将受到赞赏。
不要在数组上使用in
循环。
循环与of
:
var xs=[];
for (var i of [1,2,3]) xs.push(i);
console.log(xs);
基本上,in
在对象键上循环,而of
在数组值上循环。 “0”“1”和“2”是键。
for...in
循环不是为了迭代数组,而是设计用于枚举对象键。根据docs on MDN:
for...in
不应该用于迭代索引顺序很重要的数组。
如果与数组一起使用,则循环将数组视为对象,并将索引视为键(因此将打印字符串键)。
您的代码问题是语句for (var i in [1,2,3])
在循环体中将数组索引生成为i
。您可以在循环体中尝试一个简单的修复:
var xs=[]; for (var i in [1,2,3]) xs.push([1,2,3][i]); console.log(xs);
您可能希望在变量中提取[1,2,3]
以使代码更具可读性。
请改用Array#forEach
。它专门设计用于循环遍历数组,并且在所有环境中都是稳定的。
var xs=[]; [1,2,3].forEach(item => xs.push(item)); console.log(xs);