Object.keys()是JavaScript中获取对象自有可枚举字符串属性键名数组的标准方法,返回按定义顺序排列的字符串数组,不包含原型属性、不可枚举属性及Symbol键。

Object.keys() 是 JavaScript 中获取对象**自有可枚举属性键名数组**的标准方法。它只返回对象自身(不包括原型链上)且**可枚举(enumerable: true)** 的属性名,按属性定义顺序(非严格规范保证,但主流引擎按插入顺序)返回字符串数组。
基本用法
直接传入目标对象即可:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // ['a', 'b', 'c']
只返回自有属性,不包含继承属性
即使原型上有可枚举属性,Object.keys() 也不会返回它们:
const parent = { x: 10 };
const child = Object.create(parent);
child.y = 20;
<p>console.log(Object.keys(child)); // ['y'] —— x 来自原型,被忽略
跳过不可枚举属性和 Symbol 属性
- 通过
Object.defineProperty()设置enumerable: false的属性不会出现 - 所有 Symbol 类型的键(无论是否可枚举)都不会被返回
const obj = {};
obj.normal = 'ok';
<p>Object.defineProperty(obj, 'hidden', {
value: 'no',
enumerable: false
});</p><p>obj[Symbol('sym')] = 'symbol value';</p><p>console.log(Object.keys(obj)); // ['normal']
常见配合用法
- 遍历键名:
Object.keys(obj).forEach(key => console.log(key, obj[key])) - 判断是否为空对象:
Object.keys(obj).length === 0 - 提取部分属性:
const subset = Object.keys(obj).filter(k => k.startsWith('user')).reduce((acc, k) => ({ ...acc, [k]: obj[k] }), {})


















