object.keys()、object.values()、object.entries()分别返回对象自身可枚举属性的键名字符串数组、对应值数组、键值对二维数组,三者均不修改原对象、不处理原型链、不支持null/undefined。

JavaScript 中 Object.keys()、Object.values() 和 Object.entries() 是获取对象“数据视图”的三个核心静态方法。它们不修改原对象,而是返回新数组,分别提供对象自身可枚举属性的键、值、键值对视图。
Object.keys():只取键名,返回字符串数组
它遍历对象自身所有可枚举的字符串键(不含 Symbol 键),按属性定义顺序返回一个字符串数组。
注意:继承属性和不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的)不会被包含。
例如:
const user = { name: 'Alice', age: 30, city: 'Beijing' };console.log(Object.keys(user)); // ['name', 'age', 'city']
Object.values():只取键值,返回对应值数组
返回顺序与 Object.keys() 严格一致,即第 i 个值对应第 i 个键的值。值类型保持原样(数字、布尔、对象、undefined 等都照常返回)。
常见用途包括快速提取配置值、校验非空字段、做简单聚合等。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
例如:
const config = { timeout: 5000, retry: 3, debug: true };console.log(Object.values(config)); // [5000, 3, true]
Object.entries():同时取键和值,返回二维数组
每个元素是长度为 2 的数组:[key, value],整体构成一个“键值对数组”。这是实现对象遍历、转换、过滤最自然的入口。
配合解构和 for...of 使用非常简洁:
for (const [key, value] of Object.entries(data)) {
console.log(`${key}: ${value}`); // a: 1, b: 2, c: 3
}
也可用于转成 Map 或筛选特定条目:
const filtered = Object.entries(data).filter(([, v]) => v > 1)
.reduce((obj, [k, v]) => ({ ...obj, [k]: v }), {}); // { b: 2, c: 3 }
三者共性与注意事项
它们都只处理对象自身的可枚举属性,不递归,也不访问原型链。
- 不支持 null 或 undefined —— 传入会抛出 TypeError
- 对类数组对象(如 arguments、NodeList)需先转为普通对象再使用,或用
Array.from()配合 - Symbol 类型的键默认不出现,如需包含,得手动合并:
[...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)] - 返回的都是浅拷贝数组,修改数组不影响原对象;但若值是引用类型(如对象、数组),修改其内容仍会影响原对象
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










