一、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);
});