为什么document.images不仅包含图像引用?

时间:2017-05-11 18:32:09

标签: javascript dom domdocument

JavaScript新手在这里,请求温柔。我正在使用的JavaScript资源似乎都说document.images是对页面上img元素的引用的数组(更新:除了它不是数组;请参阅下面的Badacadabra的答案)。这很清楚,所以为了深入研究,我写了 this

<!DOCTYPE html>
<html>
<body>
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">       
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">
  <p><button onclick="myFunction()">test</button></p>
  <p id="demo"></p>

  <script>
    function myFunction() {
      image_report = ""
      for (i in document.images) {
        image_report = image_report + document.images[i].src + "<br>";
      }
      document.getElementById("demo").innerHTML = image_report;
    }
  </script>
</body>
</html>

但是,除了获取页面的三个图像的src值列表之外,我还得到另外三个未定义src的对象:

http://java2s.com/style/demo/border.png
http://java2s.com/style/demo/border.png
http://java2s.com/style/demo/border.png
undefined
undefined
undefined

那些是什么,他们在那里做什么?为什么不解释这个问题,例如 here ?我可能遗漏了for...in的工作原理吗?

3 个答案:

答案 0 :(得分:2)

  

z = (np.linspace(0, h, np.size(u)) * np.outer(np.ones(np.size(u)), np.ones(np.size(u)))).T 语句迭代一个的可枚举属性   对象

for..in还获得了for...in

.length.item.namedItem属性

您也可以使用document.images循环

for..of

答案 1 :(得分:1)

你可以改用它:

document.getElementsByTagName('img')

答案 2 :(得分:1)

document.images 数组。

console.log(Array.isArray(document.images));

document.images是一个 HTMLCollection ,它是一个类似数组的对象。类似数组的对象看起来像一个数组(键是数字),有一个length属性,但不是Array的实例,并且无法访问Array.prototype方法。

顺便说一下,这段代码应该有效:

for (var i = 0; i < document.images.length; i++) {
  console.log(document.images[i].src);
}