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 }

 

转载于:https://www.cnblogs.com/kuangliu/p/6376721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值