为什么 NodeList 不是数组?

Posted lguow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么 NodeList 不是数组?相关的知识,希望对你有一定的参考价值。

//5.element.childNodes 返回元素的一个子节点的数组<br>
console.log(document.body.childNodes); // NodeList。

NodeList 对象在某些方面和数组非常相似,看上去可以直接使用从 Array.prototype 上继承的方法。然而,除了forEach方法,NodeList 没有这些类似数组的方法。

javascript 的继承机制是基于原型的。数组元素之所以有一些数组方法(比如 forEach 和 map),是因为它的原型链上有这些方法,如下:

myArray --> Array.prototype --> Object.prototype --> null (想要获取一个对象的原型链,可以连续的调用 Object.getPrototypeOf,直到原型链尽头).

forEach, map这些方式其实是 Array.prototype 这个对象的方法。

和数组不一样,NodeList的原型链是这样的:

myNodeList --> NodeList.prototype --> Object.prototype --> null

NodeList的原型上除了类似数组的forEach方法之外,还有item,entries,keys和values方法。

以上是关于为什么 NodeList 不是数组?的主要内容,如果未能解决你的问题,请参考以下文章

在不转换为数组的情况下迭代 NodeList 并移动其元素的惯用方法是啥?

NodeList对象的特点

了解JavaScript中的伪数组

javaScript之NodeList

类数组及其转换

如何在页面加载时显示nodeList的第一个元素?