Object.values()是ES6后期引入的静态方法,返回对象自身可枚举、非Symbol属性值的数组,按数字键升序+字符串键定义顺序排列,支持原始值装箱但不接受null/undefined。

Object.values() 是 ES8(实际广泛支持始于 ES6 后期环境,主流浏览器及 Node.js 8+ 已稳定支持)引入的静态方法,专门用于获取对象**自身、可枚举、非 Symbol 类型**的属性值,返回一个按属性定义顺序排列的数组。
核心用法很简单
直接传入目标对象即可:
const values = Object.values(obj);
例如:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
const user = { name: '李四', role: 'admin', active: true };
console.log(Object.values(user)); // ['李四', 'admin', true]
它只取“自身的”可枚举值
不会包含从原型继承来的属性,也不会返回不可枚举或 Symbol 属性的值:
- 如果对象有
__proto__上的属性(如toString),不会出现在结果中 - 用
Object.defineProperty设置enumerable: false的属性,会被跳过 - Symbol 键对应的值,一律不包含(即使该 Symbol 属性本身是可枚举的)
注意值的顺序规则
返回数组中值的顺序,与 for...in 遍历该对象时的顺序一致,但更可靠(不混入原型链):
- 字符串键和数字键混合时,数字键按数值升序排在前面,再是字符串键(按定义顺序)
- 纯字符串键,按书写顺序保留
- 例如:
{ 10: 'x', 2: 'y', a: 'z' }→['y', 'x', 'z']
兼容非对象参数(自动装箱)
传入原始值时会尝试转为对应包装对象:
-
Object.values('abc')→['a', 'b', 'c'] -
Object.values(123)→[](数字无自有可枚举属性) -
Object.values(null)或undefined会报TypeError

















