javascript 中可迭代对象的格式是什么

What is the format of an iterable in javascript

我正在学习 es6 中的迭代,我了解它的作用。但是,我经常遇到 "it returns an iterable" 这个词。如果一个对象看起来像这样 { } 和一个像这样的数组 [ ] 等等,有人可以告诉我可迭代对象是什么样的吗?谢谢

Iterable 表示具有函数Symbol.iterator的对象(数组也是对象)。为了简单地测试一个对象是否可迭代,你可以尝试在它上面使用扩展运算符

例子 了解可迭代的工作原理 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

Iterable是接口,不是数据结构。你可以阅读更多here

可迭代本身不是数据结构(如数组或对象)。相反,它是一个对象的 属性 函数,它定义了 如何 对象是可迭代的。

详情见Iteration Protocols

The iterable protocol allows JavaScript objects to define or customize their iteration behavior, such as what values are looped over in a for..of construct. Some built-in types are built-in iterables with a default iteration behavior, such as Array or Map, while other types (such as Object) are not.

当他们说 "it will return iterable" 时,这意味着您可以在 for...of 循环中使用它来迭代该对象。正如我们所知,Plain JS Object 是不可迭代的。以下是可迭代值: 1.Arrays 2.Strings 3.Maps 4.Sets 可迭代对象是一种数据结构,它希望 public 可以访问其元素。它通过实现一个键为 Symbol.iterator 的方法来实现。该方法是迭代器的工厂。

基本上 iterable 是一个值,甚至是实现 Symbol.iterator 的原始值。

例如数组默认有这个,比如

var array = ['a', 'b', 'c'];

console.log(...array);

但是,如果您将迭代器添加到 Number 的原型中,您甚至可以传播数字。

Number.prototype[Symbol.iterator] = function* () {
    for (var i = 0; i < this; i++) {
        yield i;
    }
};

console.log(...10);