JavaScript中数组和集合的区别是什么,什么时候我应该选择一个而不是另一个

What is the difference between an array and collection in JavaScript and when should I choose one over the other?

本文关键字:一个 另一个 选择 我应该 集合 数组 区别 什么时候 是什么 JavaScript      更新时间:2023-09-26

我目前正在阅读Jon Duckett写的《JavaScript和jQuery交互式前端Web开发》一书。在关于DOM的那一章中,它提到

nodelist看起来像数组,编号也像数组,但它们确实是不是数组。它们是一种称为集合的对象类型。

我的问题是,数组和集合在JavaScript中的区别是什么,什么时候我应该选择一个超过另一个?

From https://developer.mozilla.org/it/docs/Web/API/NodeList:

为什么NodeList不是数组?

NodeList的使用非常像数组,并且很容易调用数组中。prototype方法,而NodeList对象没有任何熟悉的Array方法

JavaScript有一个基于原型的继承机制内置对象(如array)和宿主对象(如nodelist)。数组实例继承数组方法(如forEach或map),因为它们的原型链如下所示:

myArray -> Array。原型->对象。prototype -> null对象的原型链可以通过调用获得对象。getPrototypeOf多次)

forEach、map等是Array.prototype自己的属性对象。

与数组不同,NodeList原型链如下:

myNodeList -> NodeList。原型->对象。原型-> null

节点列表。Prototype包含item方法,但没有数组中。

NodeListsArray元素集合非常相似,通常被称为"类数组",但有一个细微的区别—将集合保留为NodeList会错过许多JavaScript功能,例如真正的数组迭代和原型方法。


NodeList接口提供了节点有序集合的抽象,但没有定义或约束该集合的实现方式。


NodeList to array

var myArray = Array.prototype.slice。调用(myList, 0);未定义的myArray.constructor.toString ();"function Array() {(本机代码)} "