用于硬编码阵列的For-in

时间:2012-08-17 22:23:33

标签: javascript

Rookie JS问题:

for( var p in ['nodeName', 'nodeType', 'tagName', 'localName'] ) {
    console.log( p + '=' + all[i][p] + '\n' );
}

我希望看到像

这样的东西
nodeName=DIV

相反,我得到了

0=undefined

我是否被迫将数组分配给变量,以便我可以将其编入索引?有没有办法在for-in中使用这种语法并从数组中检索字符串?

谢谢!

1 个答案:

答案 0 :(得分:6)

对数组使用for..in 几乎总是错误的。它遍历对象属性,而不是值-s所以在你的情况下它会产生0,1,2和3.如果你决定用自定义方法扩展Array.prototype,它会更糟 (与扩展Object.prototype不同,这不是一个很大的禁忌)。使用for..in时,它们的名称也将被重复。

做你想做的事的正确方法是:

var foo = [...];
for(var i = 0; i < foo.length; i++) {
    // use foo[i]
}

或者这个(在现代浏览器中或者使用shim'd函数):

[...].forEach(function(value) {
    // use value
});