在处理JavaScript对象时,获取其所有键名或键值是常见的需求。无论是为了迭代、序列化还是数据转换,ES5及后续版本都提供了直接且标准的方法来完成这些操作。
![图片[1]-如何获取对象的所有键或值?-速码派](http://www.sumapai.com/wp-content/uploads/2026/01/43267cdfc47442a5a08a2c6d6d395d58tplv-tb4s082cfz-aigc_resize_1080_1080-1-1024x683.webp)
获取对象的所有键
Object.keys() 方法返回一个由给定对象自身的、可枚举属性名组成的数组。这个数组的顺序与使用for...in循环遍历该对象时返回的顺序一致(首先按数字升序排列字符串键,然后按创建顺序排列其他字符串键)。
const person = {
name: 'Alice',
age: 30,
job: 'Engineer'
};
const keys = Object.keys(person);
console.log(keys); // ['name', 'age', 'job']
这个方法非常实用,因为它返回的是一个标准的数组,你可以直接在其上使用map、filter或forEach等方法。它只返回对象自身的属性,不包含其原型链上的属性。
获取对象的所有值
与获取键相对应,Object.values() 方法返回一个由给定对象自身的、可枚举属性值组成的数组。其值的顺序与Object.keys()提供的顺序相同。
const values = Object.values(person);
console.log(values); // ['Alice', 30, 'Engineer']
这个方法是ES2017(ES8)中引入的,它为我们直接访问对象的值集合提供了便利,无需先获取键再映射取值。
获取对象的键值对数组
有时你需要同时获取键和值。Object.entries() 方法返回一个由给定对象自身的、可枚举属性的键值对组成的数组。每个键值对是一个包含两个元素的数组:[key, value]。
const entries = Object.entries(person);
console.log(entries);
// [['name', 'Alice'], ['age', 30], ['job', 'Engineer']]
这在将对象转换为Map,或者需要同时操作键和值的场景下尤其有用。你可以直接使用for...of循环遍历这些条目。
处理非自身属性的遍历
上述三个方法都只处理对象自身的可枚举属性。如果你需要遍历包括原型链上继承的属性,可以使用for...in循环。但通常,在处理具体数据时,我们更关心对象自身拥有的属性。
for (let key in person) {
if (person.hasOwnProperty(key)) {
console.log(key, person[key]);
}
}
在for...in循环内部使用hasOwnProperty()检查,可以确保只处理对象自身的属性,避免意外访问到继承的属性。
这些静态方法构成了操作对象属性的基础工具链。它们返回的都是数组,这使得函数式编程变得非常方便。例如,你可以使用Object.entries()将对象转化为数组,进行复杂的过滤或映射操作,再使用Object.fromEntries()将处理后的数组重新组合成对象。掌握它们能极大地提升你操作数据的效率。




















暂无评论内容