Javascript JS中实数数组和数组迭代器的区别是什么

Javascript JS中实数数组和数组迭代器的区别是什么,javascript,arrays,iterator,Javascript,Arrays,Iterator,如果有:让myArr=[1,2,3,4],如果有:myArr.values();我们将得到数组迭代器[1,2,3,4]。 那么,数组和数组迭代器的区别是什么呢 在JavaScript中,迭代器是定义序列和 可能在其终止时返回值。更具体地说是 迭代器是实现迭代器的任何对象 这里也有很好的解释 默认情况下,使用arr[Symbol.iterator]将返回值() 功能 数组与迭代器不同,尽管它们有些相似 数组是可以调用方法的数据集合(如forEach和map),并且可以传递给其他数组方法(如con

如果有:让myArr=[1,2,3,4],如果有:myArr.values();我们将得到数组迭代器[1,2,3,4]。 那么,数组和数组迭代器的区别是什么呢

在JavaScript中,迭代器是定义序列和 可能在其终止时返回值。更具体地说是 迭代器是实现迭代器的任何对象

这里也有很好的解释

默认情况下,使用arr[Symbol.iterator]将返回值() 功能


数组与迭代器不同,尽管它们有些相似

数组是可以调用方法的数据集合(如
forEach
map
),并且可以传递给其他数组方法(如
concat
)。数组也恰好是可编辑的(它们有一个
Symbol.iterator
方法)

另一方面,迭代器或数组迭代器只提供对数据进行迭代的功能;它不允许其他任何东西。您不能将推送到迭代器,或对其进行修改,或从某些标记中提取值(实际上不需要对其进行迭代)。使用迭代器可以做的只是迭代,而使用完整数组可以做很多其他事情

在这里,很少有调用
Array.prototype.values
的用例,因为它返回的迭代器与在普通数组上进行迭代时使用的迭代器相同(for..of)。如果你有

让myArr=[1,2,3,4];
常量迭代器=myArr.values();
for(迭代器的常量值){
console.log(值);

}
当您将数组声明为
让myArr=[1,2,3,4]
时,它将返回一个数组类型的对象。它具有与数组类型关联的所有属性和方法,如长度、推送、弹出等

另一方面,
myArr.values()
返回一个迭代器。迭代器与原始数组不同,因为它不具有数组的属性和方法。相反,作为一个迭代器,它有自己的方法,如
next
,您可以使用这些方法对值进行迭代


它们有不同的用途和功能:

  • 数组是房间,迭代器是房间守卫,允许移动到下一个房间
  • 迭代器允许您遍历,例如,可以调用next()
  • 迭代器不允许您通过索引进行访问,例如迭代器[0]


您似乎对他们登录控制台的方式感到困惑。看看它们是如何实际使用的。数组必须全部分配,但迭代器只在必要时使用,因此可以表示无限大小的序列,例如mozilla文档中0到无穷大之间的整数范围,但这也是一个优点。
const x = [1, 2, 3];
const iterator = x.values();

console.log(x[1]);    //OK -> 2
console.log(iterator[1]);  //   -> Undefined

console.log(iterator.next()); //OK -> 1
console.log(iterator.next()); //OK -> 2
console.log(iterator.next()); //OK -> 3
console.log(iterator.next()); //OK -> { value: undefined, done: true }
//x.next();         //✗Error: x.next is not a function