所有JavaScript可迭代对象是否都具有next()方法?

Tom*_*ger 2 javascript arrays iterator iterable

我正在从https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Iterators_and_Generators学习有关Iterable的内容,并且它清楚地表明Array是Iterable的。在chrome控制台中对其进行检查,我们可以看到它具有Symbol.iterator,并且可以for..of在其上运行。

但是数组似乎并没有遵循next()我拥有的一种方法的迭代器模式,因为您无法重置迭代器,这将严重限制数组。

但是我很难从文档中确定哪些Iterables具有完整的实现(next()),哪些没有完整的实现,或者我在这里错过了一个基本概念。

我想念什么?

Mar*_*yer 6

我认为您所缺少的是,迭代器可迭代的对象之间存在差异。

数组是可迭代的,但不是迭代器。您可以从数组中获得一个迭代器,这使得它可以迭代:

// iterable
let arr = [1, 2, 3, 4]          

// Symbol.iterator function returns the iterator
let it = arr[Symbol.iterator]() 

// iterators have next()
console.log(it.next())          
console.log(it.next())          
console.log(it.next())          
console.log(it.next())          
console.log(it.next())
Run Code Online (Sandbox Code Playgroud)