JavaScript中的数组和集合之间的区别是什么?我应该何时选择其中一个?

时间:2016-09-15 08:46:00

标签: javascript arrays dom collections

我目前正在阅读一本名为" JavaScript和jQuery Interactive Front End Web Developement"作者:Jon Duckett。在关于DOM的章节中,它提到了

  

NodeLists看起来像数组,编号像数组,但它们是   实际上不是数组。它们是一种称为集合的对象。

我的问题是,JavaScript中的数组和集合之间的区别是什么?我应该何时选择其中一个?

2 个答案:

答案 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(){             [本机代码]         }"