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
和数组。我不在乎该行的可读性。我想知道为什么数组对象的键是字符串而不是数字。从规范的任何声明,将不胜感激。
答案 0 :(得分:4)
不要在数组上与in
一起循环。
带有of
的循环:
var xs=[];
for (var i of [1,2,3]) xs.push(i);
console.log(xs);
基本上,in
循环对象键,of
循环数组值。 “ 0”,“ 1”和“ 2”是键。
答案 1 :(得分:3)
for...in
循环并不是要遍历数组,而是旨在枚举对象键。根据{{3}}:
for...in
不应用于遍历索引顺序很重要的Array。
如果与数组一起使用,则循环将数组视为对象,并将索引视为键(这样将打印出字符串化的键)。
代码的问题在于,语句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]
,以使代码更具可读性。
改为使用docs on MDN。它是专门为循环阵列而设计的,并且在所有环境中都稳定。
var xs=[]; [1,2,3].forEach(item => xs.push(item)); console.log(xs);