object.keys()返回对象自身可枚举属性名的字符串数组,不包括原型属性、不可枚举属性和symbol键;常用于遍历、筛选或构建新对象,区别于object.getownpropertynames()等方法。

Object.keys() 是 JavaScript 中获取对象自身可枚举属性名的最常用方法,它返回一个由字符串组成的数组,每个字符串都是对象自身的、可枚举的属性名(不包括继承的属性,也不包括 Symbol 类型的键)。
基本用法:获取普通对象的属性名
直接传入一个对象,就能得到它的所有可枚举自有属性名:
const obj = { name: 'Alice', age: 30, city: 'Beijing' };const keys = Object.keys(obj);
console.log(keys); // ['name', 'age', 'city']
注意:只返回可枚举的自有属性
以下情况不会出现在结果中:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 原型链上的属性(如
toString、hasOwnProperty) - 不可枚举属性(例如通过
Object.defineProperty设置enumerable: false的属性) - Symbol 类型的键(即使可枚举)
const obj = Object.create(parent);
obj.y = 2;
Object.defineProperty(obj, 'z', { value: 3, enumerable: false });
console.log(Object.keys(obj)); // ['y']
常见配合操作
拿到属性名数组后,常结合数组方法做进一步处理:
- 遍历属性值:
Object.keys(obj).forEach(key => console.log(key, obj[key])) - 筛选特定属性:
Object.keys(obj).filter(key => key.startsWith('a')) - 生成新对象(如取子集):
Object.fromEntries(Object.keys(obj).filter(k => k !== 'age').map(k => [k, obj[k]]))
和 Object.getOwnPropertyNames() 的区别
如果需要包含不可枚举属性,应使用 Object.getOwnPropertyNames();如果还要包含 Symbol 键,则用 Object.getOwnPropertySymbols() 或 Reflect.ownKeys()。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










