ES6 提供三個新的方法——entries()
,keys()
和values()
——用於遍歷數組。它們都返回一個遍歷器對象(詳見《Iterator》一章),可以用for...of
循環進行遍歷,唯一的區別是keys()
是對鍵名的遍歷、values()
是對鍵值的遍歷,entries()
是對鍵值對的遍歷。
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 // 1 for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a' // 'b' for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a" // 1 "b"
Object.keys()
ES5 引入了Object.keys
方法,返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵名。
var obj = { foo: 'bar', baz: 42 }; Object.keys(obj) // ["foo", "baz"]
ES2017 引入了跟Object.keys
配套的Object.values
和Object.entries
,作為遍歷一個對象的補充手段,供for...of
循環使用。
let obj = { a: 1, b: 2, c: 3 }; for (let key of Object.keys(obj)) { console.log(key); // 'a', 'b', 'c' } for (let value of Object.values(obj)) { console.log(value); // 1, 2, 3 } for (let [key, value] of Object.entries(obj)) { console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3] }
因為其他遍歷方法比如for in只能通過obj[key]的方式拿到對象的鍵值,ES6可通過 Object.values(obj) 拿到對象的鍵值。