zoukankan      html  css  js  c++  java
  • Object value iterator:值迭代器

     1 // ES5
     2 // 对于数组,使用标准的 for 循环,其实这种方式并不是在遍历值,而是遍历下标来指向值!ES5中增加了一些数组迭代器:forEach、every、some
     3 // forEach:遍历数组中的所有值并忽略回调函数的返回值
     4 // every:一直运行直到回调函数返回 false
     5 // some:一直运行直到回调函数返回 true
     6 // 对于对象, for..in 循环实际上遍历的是对象的可枚举属性列表(包括原型链)需要手动获取属性值
     7 // 手动实现一个类似内置迭代器的 @@iterator
     8 var myObject = {
     9   a: 2,
    10   b: 3
    11 };
    12 
    13 Object.defineProperty( myObject, Symbol.iterator, {
    14   enumerable: false,
    15   writable: false,
    16   configurable: true,
    17   value: function() {
    18     var o = this;
    19     var idx = 0;
    20     var ks = Object.keys( o );
    21     
    22     return {
    23       next: function() {
    24         return {
    25           value: o[ks[idx++]],
    26           done: (idx > ks.length)
    27         };
    28       }
    29     };
    30   }
    31 } );
    32 
    33 // 手动遍历 myObject
    34 var it = myObject[Symbol.iterator]();
    35 
    36 console.log(it.next());   // { done: false, value: 2 }
    37 console.log(it.next());   // { done: false, value: 3 }
    38 console.log(it.next());   // { done: true, value: undefined }
    39 
    40 // ES6
    41 // 使用 for..of 遍历数据结构(数组、对象等等)中的值,它会使用内置的 @@iterator 对象并调用它的 next 方法来遍历数据值
    42 for (var v of myObject) {
    43   console.log(v);
    44 }
  • 相关阅读:
    安装了windows mobile 5.0 pocket pc SDK
    落户这里
    NOIP 2021 游记
    log4net重复记日志
    Eclipse中properties文件中文显示编码、乱码问题
    查找包下已经实施的增强
    vs2010 编译 Ogre 1.8 源码
    Ogre 设计模式之Singleton
    23种设计模式的解析与C++实现及源码打包下载
    vs2010 编译 SALVIA源码
  • 原文地址:https://www.cnblogs.com/kuangliu/p/6376721.html
Copyright © 2011-2022 走看看