背景:
我在处理节点列表时遇到了一个非常奇怪的现象。我想使用 getElementsByClassName 或类似的东西,然后对其进行排序。我决定一种方法是遍历节点列表并将每个项目推送到一个数组并对数组进行排序。(顺便说一句,这确实有效,但不如预期的那样)。我尝试使用for (var i in nodeList)
来迭代,但它一直在最后几个未定义的项目上抛出异常。奇怪的是我可以用它for (var i = 0; i < nodeList.length; i++)
来迭代。我刚刚再次对其进行了测试,并在我在控制台中运行的 stackoverflow 页面上运行了以下代码:
for (var i in document.getElementsByTagName("span"))
console.count("items");
console.log(document.getElementsByTagName("span").length);
它算了,items: 382
但长度给了380
。正如预期的那样,当我进入时document.getElementsByTagName("span")[380]
,document.getElementsByTagName("span")[381]
他们回来时未定义。这种奇怪的行为不会发生在数组上(当然,nodeLists 和数组是不同的,但这确实证明它不是导致问题的不同 for 循环)。
问题:
为什么for(var i in nodeList)
结构在 nodeLists 上的行为不同,最后返回了几个未定义的项目?