美文网首页
利用Symbol.iterator设置迭代器

利用Symbol.iterator设置迭代器

作者: videring | 来源:发表于2020-10-03 11:19 被阅读0次

Symbol.iterator为每一个对象定义了默认的迭代器。该迭代器可以被 [for...of] 循环使用。

Symbol.iterator 属性的属性特性:
writable false
enumerable false
configurable false

示例

var mm = {
  a: 1,
  b: 2,
  [Symbol.iterator]: function* () {
    yield* [{a: 1}, {b: 2}]
  }
}
console.log([...mm]); // [{"a":1},{"b":2}]
console.log(Array.from(mm));// [{"a":1},{"b":2}]

如果一个迭代器 @@iterator 没有返回一个迭代器对象,那么它就是一个不符合标准的迭代器,这样的迭代器将会在运行期抛出异常,甚至非常诡异的 Bug。

var nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
console.log([...nonWellFormedIterable]); // VM482:3 Uncaught TypeError: Result of the Symbol.iterator method is not an object  at <anonymous>:3:1

求长度

function count( iterator ) {
    let count = 0;
    for ( const _ of iterator ) { // eslint-disable-line no-unused-vars
        count++;
    }
    return count;
}
console.log(count(mm)) // 2

参考:Symbol.iterator

相关文章

网友评论

      本文标题:利用Symbol.iterator设置迭代器

      本文链接:https://www.haomeiwen.com/subject/dvhwuktx.html