object.values() 是提取对象可枚举属性值为数组的最简洁高效方法,返回按定义顺序的原始类型值,不包含不可枚举属性和原型链属性。

Object.values() 是 JavaScript 中最简洁高效的方式之一,用于将对象的值提取为数组。它不关心键名,只返回按对象属性定义顺序(非枚举、非原型链)出现的值,且保持原始类型不变。
基础用法:直接获取所有可枚举属性值
对普通对象调用 Object.values(obj),会返回一个新数组,包含对象自身所有可枚举属性的值:
const user = { name: 'Alice', age: 30, city: 'Beijing' };
console.log(Object.values(user)); // ['Alice', 30, 'Beijing']
注意:该方法忽略不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的属性),也不包含原型链上的属性。
处理嵌套对象或复杂结构
Object.values() 本身不做深度遍历,但可与其它方法组合使用:
- 对每个值进一步处理:结合 map() 转换类型或提取子字段
- 扁平化嵌套:配合 flat() 或递归函数(需自行实现)
- 过滤后再取值:先用 Object.keys() 筛选键名,再用 map() 取对应值
const data = { a: { id: 1 }, b: { id: 2 }, c: null };
const ids = Object.values(data)
.filter(item => item && typeof item === 'object')
.map(obj => obj.id);
// [1, 2]
与 Object.keys() 和 Object.entries() 的对比
三者用途不同,选择取决于你需要什么:
- Object.keys() → 只要键名数组
- Object.values() → 只要值数组(最贴合“转为数组”的常见意图)
- Object.entries() → 键值对二维数组,适合需要同时操作键和值的场景
例如想把对象转成 value-only 数组,Object.values() 是语义最清晰、代码最短的选择。
兼容性与替代方案
支持 ES2017+ 环境(Chrome 54+, Firefox 47+, Node.js 7.0+)。若需兼容旧环境:
- 用 Object.keys(obj).map(key => obj[key])
- 或借助 Lodash 的 _.values()
现代项目中,直接使用 Object.values() 即可,简洁、可读性强、性能好。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











