object.keys() 返回对象自身所有可枚举字符串属性键名的数组,按定义顺序排列,不包含不可枚举属性、原型链属性及 symbol 键;常用作遍历、判空和字段提取。

Object.keys() 是 JavaScript 中获取对象所有自有可枚举属性键名的标准方法,返回一个字符串数组,按属性在对象中出现的顺序排列。
基本用法:直接传入对象
只需把目标对象作为参数传给 Object.keys(),它会返回该对象自身(不包括原型链上)所有可枚举属性的键名数组:
- 只遍历对象自身的属性(不继承自 prototype)
- 跳过不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的属性)
- 不包含 Symbol 类型的键(即使可枚举)
例如:
console.log(Object.keys(obj)); // ['a', 'b', 'c']
注意:不能获取不可枚举或原型上的属性
如果属性被定义为不可枚举,或者来自原型链,Object.keys() 不会返回它们:
- Object.defineProperty(obj, 'hidden', { value: 42, enumerable: false }) → Object.keys(obj) 不包含 'hidden'
- obj.__proto__.protoProp = 'from proto' → Object.keys(obj) 不包含 'protoProp'
想获取所有键(包括不可枚举、Symbol、原型属性)?用其他方法
根据需求可组合使用:
- 所有自有属性(含不可枚举):Object.getOwnPropertyNames(obj)
- 所有自有 Symbol 属性:Object.getOwnPropertySymbols(obj)
- 原型链上可枚举属性:for...in(需配合 hasOwnProperty 过滤)
- 完整键集合(可枚举 + 不可枚举 + Symbol):合并 Object.getOwnPropertyNames 和 Object.getOwnPropertySymbols
常见实用场景
常用于遍历、校验、序列化等操作:
- 批量处理属性:Object.keys(obj).forEach(key => console.log(key, obj[key]))
- 判断对象是否为空:Object.keys(obj).length === 0
- 提取特定字段生成新对象:const picked = Object.keys(obj).filter(k => k !== 'id').reduce((acc, k) => ({ ...acc, [k]: obj[k] }), {})
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











