object.values用于获取对象自身可枚举属性的值并返回数组,按数字键数值升序、非数字键定义顺序排列;不包含原型属性和不可枚举属性;传入null/undefined报错,原始类型转包装对象处理。

Object.values 是 JavaScript 内置方法,用于**直接获取对象自身可枚举属性的值**,返回一个数组,顺序与 for...in 遍历一致(即按属性定义顺序,对数字键会自动排序)。
基本用法:传入普通对象
只要对象是纯键值对结构,调用 Object.values(obj) 就能拿到所有可枚举属性的值:
const user = { name: '张三', age: 28, city: '杭州' };
console.log(Object.values(user));
// ['张三', 28, '杭州']
注意:它只取**自身属性**,不包括原型链上的属性;且跳过不可枚举属性(如通过 Object.defineProperty 设置 enumerable: false 的属性)。
处理数字键和混合键名的情况
当对象键包含数字字符串时,Object.values 会把数字键按数值大小排序,其他键按定义顺序排在后面:
const obj = { '10': 'ten', '2': 'two', a: 'A', '1': 'one' };
console.log(Object.values(obj));
// ['one', 'two', 'ten', 'A'] ← 数字键 1、2、10 排序后优先,'a' 最后
- 数字字符串键(如
'1'、'10')会被识别为索引属性,按数值升序排列 - 非数字键(如
'a'、'name')保持原始定义顺序,排在数字键之后
配合解构或遍历快速使用
返回的是标准数组,可直接用于解构赋值、map、filter 等操作:
const config = { host: 'localhost', port: 3000, debug: true };
// 解构前两个值
const [host, port] = Object.values(config);
console.log(host, port); // 'localhost' 3000
// 过滤出字符串类型的值
const strValues = Object.values(config).filter(v => typeof v === 'string');
console.log(strValues); // ['localhost']
注意边界情况
以下情况需特别留意:
-
null 或 undefined 会报错:
Object.values(null)→ TypeError -
非对象类型(如字符串、数字) 会被强制转为包装对象:
Object.values('ab')→['a', 'b'](等价于String.prototype.split('')) -
类数组对象(无 Symbol.iterator) 不会自动展开,只取其自有属性值,例如
{0: 'a', 1: 'b', length: 2}→['a', 'b', 2]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











