var a = ['a', 'b', 'c'];
for(var prop in a){
console.log(prop); // '0', '1', '2'
}
console.log([] instanceof Object, a['0']); //true, 'a'
基于上面的代码,假设在创建新数组时,每个索引都设置为其相应基础对象的属性是否正确?这是指定的吗?
答案 0 :(得分:1)
你不应该使用这个结构:
for(var prop in a)
用于迭代数组的元素。它迭代对象和所有数组元素的所有可迭代属性,而不仅仅是数组元素。应使用以下样式迭代数组元素:
for (var i = 0; i < a.length; i++) {
// a[i]
}
或(在现代浏览器中):
a.forEach(function(value, index) {
// use value here
});
数组也是一个对象。它可以具有除数组元素之外的属性。正确的是,可以像使用字符串键的属性一样访问所有数组元素,但这仍然不是仅迭代数组元素的理想方式。
例如,你可以这样做:
var a = ['a', 'b', 'c'];
a.whatever = 3;
for(var prop in a){
console.log(prop); // '0', '1', '2', 'whatever'
}
答案 1 :(得分:1)
是的,我相信它是规范的一部分:数组是一个对象,它的属性名称是转换为字符串的索引。这有点难看。
答案 2 :(得分:0)
for(... in ...)用于循环对象的属性和方法。
你想对你正在使用的数组使用经典的(i = 0; i&lt; length; i ++)。