数组对象索引属性

时间:2014-01-19 14:30:26

标签: javascript

var a = ['a', 'b', 'c'];

for(var prop in a){
    console.log(prop); // '0', '1', '2'
}

console.log([] instanceof Object, a['0']); //true, 'a'

基于上面的代码,假设在创建新数组时,每个索引都设置为其相应基础对象的属性是否正确?这是指定的吗?

3 个答案:

答案 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 ++)。