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 }
作者:狂流
出处:http://www.cnblogs.com/kuangliu/
欢迎转载,分享快乐! 如果觉得这篇文章对你有用,请抖抖小手,推荐一下!