1、遍歷數組的幾種方式javascript
一、for...in遍歷數組,會遍歷數組的索引和數組原型上的對象java
二、for循環直接遍歷數組
三、迭代器:forEach(遍歷數組中全部的值,並忽略回調函數返回的值)、every(一直運行直到返回false)、some(一直運行直到返回true)等遍歷閉包
四、for...of直接遍歷數組中的值函數
對於for...of,只要是能夠迭代的對象均可以用for...of來遍歷,也就是內部實現了iterator的對象this
var arr = ["1", "4", "7", "9", "11"] for(v of arr) { console.log(v) }
數組中內置@@iterator對象,使用方式以下:對象
var arr = [1, 2, 4] var it = arr[Symbol.iterator]() it.next()//{value: 1, done: false} it.next()//{value: 2, done: false} it.next()//{value: 4, done: true}
普通對象中沒有實現@@iterator對象,可是咱們能夠給對象自定義@@iteratorblog
利用Object.defineProperty來給對象中的屬性定義特性,利用閉包來實現值的移位。索引
var obj = { a: '1', b: '5' } Object.defineProperty(obj, Symbol.iterator, { enumerable: false, writable: false, configurable: true, value: function() { var o = this; var idx = 0; var ks = Object.keys(o) return { next: function() { return { value: o[ks[idx++]], done: (idx >= ks.length) } } } } }) var it = obj[Symbol.iterator]() it.next() it.next()