用于硬编码阵列的For-in

Lee*_*rey 0 javascript

Rookie JS问题在这里:

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

我希望看到类似的东西

nodeName=DIV
Run Code Online (Sandbox Code Playgroud)

相反,我得到了

0=undefined
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Thi*_*ter 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]
}
Run Code Online (Sandbox Code Playgroud)

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

[...].forEach(function(value) {
    // use value
});
Run Code Online (Sandbox Code Playgroud)