object.values() 会返回一个包含对象自身可枚举属性值的数组,顺序与 for...in 循环一致。调用时只需传入目标对象,它会忽略原型链上的属性,并自动过滤掉 symbol 类型的键。

Object.values() 如何处理非对象输入
当传入原始类型值(如数字或字符串)时,函数会先将其包装为对应的对象实例,然后提取该包装对象的属性值。例如传入数字 123 会被视为 Number(123),由于包装对象没有可枚举属性,最终返回空数组;而传入字符串 "abc" 则被视为 String("abc"),其索引 0、1、2 成为可枚举属性,因此返回对应字符组成的数组。

console.log(Object.values(123)); // []
console.log(Object.values('abc')); // ['a', 'b', 'c']
console.log(Object.values(true)); // []
Object.values() 对继承属性的处理
该方法严格遵循“自身属性”原则,只提取定义在当前对象实例上的属性,不会获取从原型链继承来的属性。即使原型上定义了可枚举属性,也不会出现在返回值中。这一行为确保了结果仅反映对象当前的直接状态,不受外部修改原型的影响。

function Person(name) {
this.name = name;
}
Person.prototype.age = 25;
const p = new Person('Alice');
console.log(Object.values(p)); // ['Alice']
基于对象属性顺序的具体问题
在 ES2015 之后,JavaScript 规范规定了对象属性枚举的顺序:首先按插入顺序排列所有整数键(按数值大小升序),接着是按插入顺序排列的字符串键,最后是 Symbol 键。因此 Object.values() 返回的数组顺序并非完全随机,而是遵循这套严格的排序规则。开发者若依赖特定顺序,应确保键的类型和插入时机符合预期。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











