Try instead:
var arr = [1, 2, 3];
for (var i in arr)
console.log(typeof arr[i], arr[i]);
您得到的是strings 而不是numbers,因为for..in loops 迭代键/属性(在本例中为Array 的索引)而不是值。
要获取每个键的值 i,您必须使用 property accessor、arr[i]。
不过,为什么要使用字符串而不是原始数字索引,因为按照当前标准,all properties are strings。
console.log(Object.keys( ['foo', 'bar', 'baz'] )); // ["0", "1", "2"]
任何值实际上都可以与属性访问器一起使用,但在实际用作键/属性之前,它会被转换为ToString()。
6) 让 propertyNameString 为 ToString(propertyNameValue)。
Maps 和 Symbols 目前计划是例外。
此外,您可能会发现“Why is using “for…in” with array iteration such a bad idea?”感兴趣,至少考虑使用简单的for 循环:
var arr = [1, 2, 3];
for (var i = 0, l = arr.length; i < l; i++)
console.log(typeof arr[i], arr[i]);
不过,为了将来参考,即将推出的 ECMAScript 6 standard 已添加 for..of loops,它应该会按照您的预期进行迭代。
for (var i of [1, 2, 3])
console.log(typeof i, i); // number, 1, 2, 3