可迭代协议允许 JavaScript 对象去定义或定制它们的迭代行为, 例如(定义)在一个 for..of
结构中什么值可以被循环(得到)。
一些内置类型都是内置的可迭代类型并且有默认的迭代行为( 比如 String、Array、Map、Set), 另一些类型则不是 (比如Object
) 。
为了变成可迭代对象, 一个对象必须实现 @@iterator 方法, 意思是这个对象(或者它原型链 prototype chain 上的某个对象)必须有一个名字是 Symbol
.iterator
的属性。
let fridge = { name: "卡萨帝冰箱", color: "白色", brand: "海尔" }; fridge[Symbol.iterator] = function*() { yield this.name; yield this.color; yield this.brand; }; for(let attr of fridge){ console.log(attr); } let desc = [...fridge]; console.log(desc);
一些内置类型(String、Array、Map、Set)拥有默认的迭代器行为,其他类型(如 Object
)则没有。