JS对象遍历的详细阐述

发布时间:2023-05-20

一、Object.keys()

Object.keys()方法可以获取对象的所有键(属性名),返回一个由键名组成的数组。可以使用for循环或Array.prototype.forEach()方法遍历此数组,然后通过键名获取对象的值。

const obj = {a:1, b:2, c:3};
const keysArray = Object.keys(obj);
for(let i = 0; i < keysArray.length; i++){
  const key = keysArray[i];
  const value = obj[key];
  console.log(key, value);
}

或者使用Array.prototype.forEach()方法

const obj = {a:1, b:2, c:3};
const keysArray = Object.keys(obj);
keysArray.forEach((key) => {
  const value = obj[key];
  console.log(key, value);
});

二、for...in循环

for...in循环可以遍历对象的所有可枚举属性,包括继承而来的属性,但是不包括Symbol类型的属性和不可枚举属性。不建议使用for...in循环遍历数组,因为数组也可以看做是一个对象,它的索引会被当做属性名。

const obj = {a:1, b:2, c:3};
for(let key in obj){
  const value = obj[key];
  console.log(key, value);
}

三、使用Reflect.ownKeys()

Reflect.ownKeys()方法返回一个数组,包含对象自身所有属性名,不管属性名是Symbol或者字符串。

const obj = {a:1, b:2, [Symbol()]: 3};
const keysArray = Reflect.ownKeys(obj);
keysArray.forEach((key) => {
  const value = obj[key];
  console.log(key, value);
});

四、使用Object.entries()

Object.entries()方法返回一个键值对数组,包含对象自身所有可枚举属性(不包括继承而来的属性),其中每个键值对的键为属性名,值为属性值。

const obj = {a:1, b:2, c:3};
const entriesArray = Object.entries(obj);
entriesArray.forEach((entry) => {
  const key = entry[0];
  const value = entry[1];
  console.log(key, value);
});

五、使用Object.getOwnPropertyNames()

Object.getOwnPropertyNames()方法返回一个数组,包含对象自身所有属性名,包括不可枚举属性。

const obj = {a:1, b:2, [Symbol()]: 3};
const keysArray = Object.getOwnPropertyNames(obj);
keysArray.forEach((key) => {
  const value = obj[key];
  console.log(key, value);
});