Object.values()返回对象自身可枚举属性的值数组,按数值键升序、其余键定义顺序排列;Object.entries()返回[key,value]二维数组,支持解构与Map构造,二者均不遍历原型链、不可枚举属性及Symbol键。

ES6 中 Object.entries() 和 Object.values() 是专为遍历对象设计的简洁方法,它们只处理对象自身的可枚举属性,不遍历原型链,也不包含 Symbol 属性。
Object.values():快速提取所有值
它返回一个纯数组,元素是对象自身可枚举属性对应的值,顺序遵循 JavaScript 属性遍历规则(数值键按升序,其余按定义顺序)。
- 基础用法:
Object.values({ a: 1, b: 'x', 3: 'z' })→[ 'z', 1, 'x' ](因为键3是数值,排在最前) - 对字符串调用时会拆成字符数组:
Object.values('ab')→[ 'a', 'b' ] - 对空对象或无有效可枚举属性的对象,返回空数组:
Object.values({})→[]
Object.entries():同时拿到键和值
它返回二维数组,每个子数组形如 [key, value],天然适配解构赋值,特别适合配合 for...of 使用。
- 基本结构:
Object.entries({ name: 'Alice', age: 28 })→[ ['name', 'Alice'], ['age', 28] ] - 配合 for...of 解构:
for (const [k, v] of Object.entries(obj)) { console.log(k, v); } - 可用于构造 Map:
new Map(Object.entries(obj)),之后就能用.get()、.set()等方法操作
和传统遍历方式的区别
Object.values() 和 Object.entries() 都只读取对象**自身**的可枚举属性,不会像 for...in 那样受原型链干扰。比如给 Object.prototype 添加属性后,for...in 会遍历到,但这两个方法完全不受影响。
它们也不处理不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的属性)或 Symbol 键名的属性。
小提醒:别传错类型
这两个方法对非对象参数有默认行为:
- 传入
null或undefined会报错(TypeError) - 传入原始值(如数字
42、布尔值true)时,会先转为对应包装对象,但通常没有可枚举自有属性,所以返回空数组 - 传入数组时,
Object.values()返回元素值数组,Object.entries()返回索引-值对数组(索引为字符串)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











