for in
作用:可以遍历自身属性及原型链上的所有可枚举的属性,常用于遍历对象,也可遍历数组(不建议)
let person = new Object({ name: "jack", age: 11 });
let jack = Object.create(person, { color: { value: "red", enumerable: true } });
let human = [person];
for (let v in jack) {
console.log(v, "key"); // color 、name、age
}
for of(ES6)
作用:for of 常用于遍历数组、类对象(Dom NodeList) 、字符串、不支持遍历普通对象。
Iterator 的作用有三个:
- 为各种数据结构,提供一个统一的、简便的访问接口;
- 使得数据结构的成员能够按某种次序排列;
- ES6创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费;
遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署Iterator接口,就可以完成遍历操作。
for (let v of person) {
console.log(v, "key"); // person is not iterable
}
总结
Object.keys、Object.values、Object.entries、Reflect.ownkeys 可以用来遍历可枚举属性,但仅限于自身属性不包括原型链