javascript - 为什么 JavaScript 不将类似数组的对象转换为数组?

标签 javascript arrays type-conversion nodelist htmlcollection

在学习 DOM 操作时,我注意到诸如 getElementByTagName 或 querySelectorAll 之类的 Document 方法返回 HTMLCollection 或 NodeList 对象,无论它们看起来多么像数组,如果我们希望这些集合能够被转换为数组,就必须使用 Arrays.from() 转换为数组。有非常有用的数组方法。我想知道为什么会这样。 JS 没有自动将这些集合转换为数组有什么特殊原因吗?

编辑:我注意到 NodeList has forEach()在所有主要浏览器中。

最佳答案

DOM 集合有自己的类型,而不是数组(或至少是数组子类)实例,因为它们与数组非常不同。它们只是 DOM 上的 View ,它们不是存储元素本身的容器。它们是不可变的(即您不能对它们进行.push()),甚至是实时 View (即它们始终代表文档当前状态下的选择)。而且它们只能保存 DOM 节点,您不能像插入数组一样在其中放入任意值。

当然,它们类似于数组,因为它们具有索引属性和 .length,但这就是相似之处。请注意,只有 JavaScript 允许您访问具有索引属性的内容,根据与语言无关的纯 DOM,您将使用 .item(index) 方法。这就是为什么 DOM 集合拥有自己的层次结构,并且与 JavaScript 中内置的 Array 类型无关。

关于javascript - 为什么 JavaScript 不将类似数组的对象转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248922/

相关文章:

javascript - 使用 for for 循环将数组元素相乘

转换Excel日期时间的MySQL代码

javascript - React + Redux 连接(mapStateToProps)

javascript - Meteor Js , 将图像存储到 mongoDB

javascript - Mongodb 更新过期

swift - 由于 Swift 缺少 CGFloat 的隐式转换而造成的困惑

date - 将 “Fri Apr 29 06:01:46 EDT 2016”转换为HIVE中的日期格式?

javascript - jQuery 缺少 Ajax on Rails 目标

arrays - 从 Ruby 数组中删除次要项

arrays - bash:在额外条件下循环文件