es6
entries(),keys()和 values()
用户遍历数组,它们都返回一个遍历器对象,可以用for...of 循环进行遍历,唯一的区别是
- keys() 是对键名的遍历;
- values() 是对键值的遍历;
- entries() 是对键值对的遍历;
一、一般数组用法
for of 支持遍历数组、类对象、字符串、Map对象、Set对象;
for of 不支持遍历普通对象数组,可通过参考下面的Object.keys()搭配使用遍历;
for(let index of ['a','b'].keys()){
console.log(index)
}
// 0
// 1
for(let val of ['a','b'].values()){
console.log(val)
}
// a
// b
for(let [index,val] of ['a','b'].entries()){
console.log(index,val)
}
//0 'a'
//1 'b'
二、object对象keys(),values() entries();
ES5 引入Object.keys()方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
- Object.keys()
for of 不支持遍历普通对象,可通过与Object.keys() 搭配使用遍历
返回值:数组
错误写法:
let obj = { a: 1, b: 2, c: 3 };
for(let key of obj.keys()){
console.log(key )
}
//VM564:2 Uncaught TypeError: obj.keys is not a function or its return value is not iterable
let obj = { a: 1, b: 2, c: 3 };
for (let key of Object.keys(obj)) {
console.log(key); // 'a', 'b', 'c'
}
var obj1 = {"name":"lucas","age":22};
console.log(Object.keys(obj1)) //["name", "age"]
- Object.values()
ES2017 引入了跟Object.keys配套的Object.values和Object.entries,作为遍历一个对象的补充手段,供for…of循环使用。
因为其他遍历方法比如for in只能通过obj[key]的方式拿到对象的键值,ES7可通过 Object.values(obj) 拿到对象的键值。
返回值:数组
et obj = { a: 1, b: 2, c: 3 };
for (let value of Object.values(obj)) {
console.log(value); // 1, 2, 3
}
var obj1 = {"name":"lucas",age:22};
console.log(Object.values(obj1)) //["lucas", 22]
- Object.entries()
Object.entries()和 Object.keys 相关,不过 entries()函数会将 key 和 value 以数组的形式都返回。这样,使用循环或则将对象转为 Map 就很方便了。
let obj = { a: 1, b: 2, c: 3 };
for (let [key, value] of Object.entries(obj)) {
console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
}
var obj1 = {"name":"lucas",age:22};
console.log(Object.entries(obj1)) //["name","lucas"] ["age",22]
Object.entries方法的一个用处是,将对象转为真正的Map结构。
var obj2 = {foo:'bar',baz:42};
var map2 = new Map(Object.entries(obj2));
console.log(map2); //map{"foo" => "bar", "baz" => 42}
未来的我会感谢现在努力的自己。