数据集合【Array,Object,Map,Set】的统一遍历数据结构机制

Iterator 遍历过程

  1. 创建对象指针,指向起始位置
  2. 第一次调用next,访问第一个对象
  3. 不断调用next方法,直至终止
  4. { value: undefined, done: true }
var it = makeIterator(['a', 'b']);

function makeIterator(array) {
  var index = 0;
  return {
    next: function() {
      return index < array.length ? {
        value: array[index++],
        done: false
      }: {
        value: void 0,
        done: true
      }
    }
  }
}

object本身不能被遍历,
ES6规定实现Symbol.iterator 可以支持遍历

var obj = {
  name: "ranck",
  massgage: "hahah",
  level: "t3"
}

for(let value of obj) {
  console.log(value)  // Uncaught TypeError: obj is not iterable
}

obj[Symbol.iterator] = function () {  // 这样不报错,但是不生效
    return {
      next: function () {
        return {
          value: 1,
          done: false
        };
      }
    }
}


obj[Symbol.iterator]  = function () {
  const attrs = Object.getOwnPropertyNames(this)
  let index = 0
  return {
    next: () => {
      return index < attrs.length ? {
        value: this[attrs[index++]],
        done: false
      }: {
        value: void 0,
        done: true
      }
    }
  }
}

获取对象的属性

  • Object.getOwnPropertyNames
  • Object.getOwnPropertySymbols
  • Object.keys
  • Object.values
  • Object.entries
  • Reflect.ownKeys = Object.getOwnPropertyNames + Object.getOwnPropertySymbols

张仪ranck
410 声望9 粉丝

« 上一篇
ES6 Class
下一篇 »
ES6 Symbol