[ECMAScript 5 6 7] 11, ES6 - Ietetator 달력

3475 단어 고급ECMAScript
개념:
iterator 는 일종 의 인터페이스 메커니즘 으로 각종 서로 다른 데이터 구조 에 통 일 된 접근 메커니즘 을 제공한다
역할:
1. 각종 데이터 구 조 를 위해 통일 되 고 간편 한 방문 인 터 페 이 스 를 제공한다.2. 데이터 구조의 구성원 들 이 특정한 순서에 따라 배열 할 수 있 도록 3. ES6 는 새로운 옮 겨 다 니 는 명령 for... of 순환 을 만 들 었 고 Iterator 인 터 페 이 스 는 주로 for... of 소 비 를 제공 합 니 다.
작업 원리:
-         (     ),           。
-      next  ,                
-        next  ,         ,          
-    next          value done   ,{value:       ,done:    }
  * value        ,done                      ,      done   false
  *            value  undefined,done  true

원생 iterator 인 터 페 이 스 를 갖 춘 데이터 (for of 옮 겨 다 닐 수 있 음):
1、Array
2、arguments
3、set  
4、map  
5、String
。。。



  
  Iterator   


  

    //    Iterator  
    function myIterator(arr) {
      let index = 0  //        
      return {  //                 
        next:function () {  //           next           
          return index<arr.length ? {value:arr[index++],done:false} : {value:undefined,done:true}  //       done    
        }
      }
    }
    let arr = [1,40,'abc',true]
    const it = myIterator(arr)  //               ,        ,          
    console.log(it.next())  // {value: 1, done: false}
    console.log(it.next())  // {value: 40, done: false}
    console.log(it.next())  // {value: "abc", done: false}
    console.log(it.next())  // {value: true, done: false}
    console.log(it.next())  // {value: undefined, done: true}

    console.log('----------------------')
    // ES6     Iterator             ,   for of     
    //   、   、arguments、set  、map  
    for(let i of arr){
      console.log(i)  // 1 40 abc true
    }
    let str = 'ondean'
    for(let i of str){
      console.log(i)  // o n e d e a n
    }
    function fun() {
      for(let i of arguments){
        console.log(i)  // 100 200 false 'china'
      }
    }
    fun(100,200,false,'china')

    console.log('----------------------')
    /*
          :
         Symbol.iterator  ,             ,               Iterator  
         for of           ,    Symbol.iterator,       ,         xxx is not iterator
    */
    /*let obj = {
      [Symbol.iterator]: function () {
        let index = 0
        return {  //                 
          next:function () {  //           next           
            return index<this.length ? {value:this[index++],done:false} : {value:undefined,done:true}  //       done    
          }
        }
      }
    }*/
    //  :           for...of     Iterator  ,    Symbol.iterator             (              )
    class RangeIterator {
      constructor(start, stop) {
        this.value = start;
        this.stop = stop;
      }
      [Symbol.iterator]() { return this; }
      next() {
        var value = this.value;
        if (value < this.stop) {
          this.value++;
          return {done: false, value: value};
        }
        return {done: true, value: undefined};
      }
    }
    function range(start, stop) {
      return new RangeIterator(start, stop);
    }
    for (var value of range(0, 3)) {
      console.log(value); // 0, 1, 2
    }

    console.log('----------------------')
    //       、            Iterator  
    let arr2 = [1,6]
    let arr3 = [2,3,4,5]
    arr2 = [1,...arr3,6]
    console.log(arr2)  // (6) [1, 2, 3, 4, 5, 6]
    let [x,y] = arr2
    console.log(x,y)  // 1 2

  



좋은 웹페이지 즐겨찾기