JS遍历数组或对象的方法
1.遍历数组
1.1 最传统的for
循环
1.2 ES5新增的for in
方法
注意,这里的i
是数组元素的索引。
1.3 ES6新增的for of
方法
注意,这里的i
是数组元素的值。
1.4 forEach()
方法
forEach
方法接收一个回调函数作为参数,其会对数组中的每一个元素执行该函数。
该回调函数有两个可选参数:
item
— 遍历到的当前元素index
— 当前元素的索引
但注意,forEach
方法中间不能退出循环,且对于空数组不会执行回调函数!
实际上,除了forEach
,还可以用很多数组方法来遍历数组,例如:filter
、map
、reduce
、every
、some
等。
2.遍历对象
2.1 for in
循环
for-in 专门用于遍历对象的可枚举属性,包括 prototype 原型链上的属性,因此性能会比较差。
至于可枚举属性,可以通俗理解为会出现在对象的迭代(例如:for in
循环等)中的属性。
具体来说,是在用defineProperty()
方法为对象添加属性时,通过enumerable
参数配置的。
例如:
var obj = { a: 2, b: 4, c: 6 };
for (let key in obj) {
console.log(key);
}
// a b c
// 所以,遍历过程中拿到的是对象的属性名,即 key
2.2 Object.keys()
和Object.values()
Object.keys()
会返回一个新数组,包含对象的所有可枚举属性;
Object.values()
会返回一个新数组,包含对象的所有属性值;
var obj = { a: 2, b: 4, c: 6 };
// Object.keys()
Object.keys(obj).forEach(key => {
console.log(key);
})
// a b c
但注意,Object.keys()
方法只查找对象的自定义属性!
2.3 Object.getOwnPropertyNames()
使用Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性(包括不可枚举属性)
此时,就可以通过遍历数组的方法,拿到key
和value
,进而进行操作。