JavaScript'for in'语句给出了不可预知的结果

2 javascript for-loop

我有以下代码:

var images = document.getElementsByTagName('img');

if (screen.width > 640) {
    for (var image in images) {
        image = images[image];

        console.log(image['src']);
    }
}
Run Code Online (Sandbox Code Playgroud)

页面上只有一个图像,但由于某种原因,该for ... in语句循环images三次.为什么是这样?

示例:http://jsfiddle.net/OliverJAsh/C8egs/

Rob*_*b W 7

您不仅要遍历元素列表,还要遍历命名方法:

  • length
  • item
  • namedItem

正确的方法是:

for (var i=0; i<images.length; i++) {
    var image = images[i];

    console.log(image['src']);
}
Run Code Online (Sandbox Code Playgroud)

document.getElementsByTagName('img')您也可以使用,而不是使用document.images.

http://jsfiddle.net/C8egs/2/


Jon*_*ter 5

for(var x in var) 不应该用于遍历数组,因为它通过对象中的键.

如果你这样做:

for (var image in images) {
        console.log(image );
}
Run Code Online (Sandbox Code Playgroud)

您会注意到控制台输出将显示"length"(以及对象上的任何其他属性);

而是使用它像:

for (var i=0; i < images.length; i++) {
    var image = images[i];

    console.log(image['src']);
}
Run Code Online (Sandbox Code Playgroud)