You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用getElementsByTagName循环时出现额外函数输出的问题

问题原因及解决方法

你遇到的问题核心在于:getElementsByTagName() 返回的不是普通 JavaScript 数组,而是一个 HTMLCollection——这是浏览器提供的动态类数组对象,除了存储元素的索引属性(0、1、2...),它还自带了一些内置方法和属性,比如 item()、length 等。

而 for...in 循环的作用是遍历对象的所有可枚举属性,包括对象自身和原型链上的可枚举属性。所以当你用它遍历 HTMLCollection 时,不仅会拿到各个 div 元素的索引项,还会把 item() 这类内置方法也当作属性遍历出来,这就是为什么会多输出一项。

你的代码示例大概是这样:

const divElements = document.getElementsByTagName('div');
for (let prop in divElements) {
  console.log(divElements[prop]);
}

正确的遍历方式

推荐用以下几种方法来遍历 HTMLCollection,避免拿到额外属性:

  1. 普通 for 循环(最兼容)
const divElements = document.getElementsByTagName('div');
for (let i = 0; i < divElements.length; i++) {
  console.log(divElements[i]);
}
  1. 转成数组后用 forEach
    把类数组对象转成真正的数组,就能用数组的遍历方法:
// 方法1:Array.from
const divArray = Array.from(document.getElementsByTagName('div'));
divArray.forEach(div => console.log(div));

// 方法2:展开运算符
[...document.getElementsByTagName('div')].forEach(div => console.log(div));
  1. for...of 循环(ES6+)
    HTMLCollection 是可迭代对象,支持直接用 for...of 遍历:
const divElements = document.getElementsByTagName('div');
for (let div of divElements) {
  console.log(div);
}

内容的提问来源于stack exchange,提问作者tatactic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:20:27