• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Array.prototype[@@iterator]()

    @@iterator属性和Array.prototype.values()属性的初始值是同一个函数对象。

    语法

    arr[Symbol.iterator]()
    

    返回值

    数组的iterator 方法,默认情况下,与values()函数。

    示例

    使用for...of循环进行迭代

    var arr = ['a', 'b', 'c', 'd', 'e'];
    var eArr = arr[Symbol.iterator]();
    var eArr = arr[Symbol.iterator]();
    // 浏览器必须支持 for...of 循环
    for (let letter of eArr) {
      console.log(letter);
    }
    

    另一种迭代方式

    var arr = ['a', 'b', 'c', 'd', 'e'];
    var eArr = arr[Symbol.iterator]();
    console.log(eArr.next().value); // a
    console.log(eArr.next().value); // b
    console.log(eArr.next().value); // c
    console.log(eArr.next().value); // d
    console.log(eArr.next().value); // e
    

    Use Case for brace notation

    The use case for this syntax over using the dot notation(Array.prototype.values())is in a case where you don't know what object is going to be ahead of time. If you have a function that takes an iterator and then iterate over the value, but don't know if that Object is going to have a[Iterable].prototype.values method. This could be a built-in object like String object or a custom object.

    function logIterable(it) {
      var iterator = it[Symbol.iterator]();
      // 浏览器必须支持 for...of 循环
      for (let letter of iterator) {
          console.log(letter);
      }
    }
    
    // Array
    logIterable(['a', 'b', 'c']);
    // a
    // b
    // c
    
    // string
    logIterable('abc'); 
    // a
    // b
    // c