我目前正在阅读一本名为" JavaScript和jQuery Interactive Front End Web Developement"作者:Jon Duckett。在关于DOM的章节中,它提到了
NodeLists看起来像数组,编号像数组,但它们是 实际上不是数组。它们是一种称为集合的对象。
我的问题是,JavaScript中的数组和集合之间的区别是什么?我应该何时选择其中一个?
答案 0 :(得分:2)
来自https://developer.mozilla.org/it/docs/Web/API/NodeList:
为什么NodeList不是数组?
NodeList与数组非常相似,并且很容易调用 它们上的Array.prototype方法,但是NodeList对象没有 任何熟悉的数组方法。
JavaScript有一个基于原型的继承机制 内置对象(如Arrays)和宿主对象(如NodeLists)。 数组实例继承数组方法(例如forEach或map)因为 他们的原型链如下所示:
myArray - > Array.prototype - > Object.prototype - > null(The 可以通过调用获得对象的原型链 Object.getPrototypeOf几次。)
forEach,map等都是Array.prototype的属性 对象
与数组不同,NodeList原型链如下所示:
myNodeList - > NodeList.prototype - > Object.prototype - >空
NodeList.prototype包含item方法,但没有 Array.prototype方法,因此它们不能在NodeLists上使用。
答案 1 :(得分:1)
NodeLists 非常类似于数组元素集合,通常称为“类似数组”,但具有细微差别 - 通过将您的集合保存为NodeList,例如真正的Array迭代和Prototypal方法,您错过了许多JavaScript功能。
NodeList接口提供有序节点集合的抽象,而不定义或约束此集合的实现方式。
NodeList to array
var myArray = Array.prototype.slice.call(myList,0); 未定义 myArray.constructor.toString(); " function Array(){ [本机代码] }"