在学习 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/