javascript - GetElementsByTagName ▪ item() { [本地代码] } - 这是什么?

标签 javascript html dom

使用下面的代码

<ul>
  <li>Rice</li>
  <li>Coffee</li>
  <li>Beans</li>
</ul>

<script>
    var elem = document.getElementsByTagName('li')
    for (var i in elem) {
        console.log(elem[i])
    }
</script>

我看到五个结果,如下。

<li>Rice</li>
<li>Coffee</li>
<li>Beans</li>
ƒ item() { [native code] }
ƒ namedItem() { [native code] }

最后两项到底是什么?

最佳答案

for-in 循环迭代对象的所有可枚举属性。 .getElementsByTagName() 方法返回 HTMLCollection可以迭代。问题是 HTMLCollection 有额外的属性(方法):item()namedItem() 显然是可枚举 这就是为什么 for-in 会迭代它们。

为了避免这种情况,您可以使用标准的for循环:

var elem = document.getElementsByTagName('li');
for (var i = 0; i < elem.length; i++) {
    console.log(elem[i]);
}

您可以阅读有关属性描述符(例如可枚举)的信息 here .

关于javascript - GetElementsByTagName ▪ item() { [本地代码] } - 这是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60649513/

相关文章:

javascript - 动态添加的 dom 元素不响应 jQuery 函数

JavaScript - 检查字符串中的任何小写字母

android - dom 解析器错误 : PI must not start with xml

JavaScript 属性访问 : dot notation vs. 括号?

html - 如何使用脚本在 HTML 页面中显示带有换行符的字符串?

html - 了解无单位 flex 基础

php - MySQL 返回包含 HTML 的空白行

javascript - 在 javascript dom 操作后强制在 Internet Explorer 中刷新 DOM

javascript - Office UI Fabric JS 覆盖不覆盖其他组件

javascript - 在飞行中更改 MathJax 的 "width"的 "linebreaks"