在 JavaScript 中,对象是一类非常重要的数据类型,它们是一个键值对的集合。在实际开发中,我们经常需要快速地获取对象的值,例如,获取对象的属性列表、值列表等等。在 ES7 中,Object 对象新增了一个非常方便的方法 Object.values(),它可以帮助我们快速地获取对象的值,让我们来详细了解一下。
Object.values() 方法的基本用法
Object.values() 方法用于返回一个给定对象的所有可枚举属性的值的数组,这个数组的顺序是基于对象自身可枚举属性的枚举顺序。它接受一个对象作为参数,返回一个数组。示例代码如下:
let obj = { a: 'Hello', b: 42, c: false }; console.log(Object.values(obj)); // ["Hello", 42, false]
Object.values()方法的深度解析
Object.values() 方法能够返回一个对象中所有可枚举属性的值的数组,但是我们需要注意一下几点:
返回值数组的顺序并不一定与输入顺序(对象属性的顺序)一致。
返回值数组中只包含对象自身属性的值,不包含从原型链上继承的属性值。
如果参数不是对象,Object.values()方法会抛出一个 TypeError 异常。
console.log(Object.values('1234')); // TypeError: string is not iterable
返回值数组与输入顺序
Object.values()方法返回的数组并非总是按照输入的顺序来排列,而是根据对象自身可枚举属性的枚举顺序来排列的。那么什么是对象自身可枚举属性的枚举顺序呢?在 ES2015 之前,规范中并没有规定对象属性的枚举顺序。因此,不同的 JavaScript 引擎在枚举对象属性时,可能会有不同的顺序。而在 ES2015 中,规范重新定义了对象属性的枚举顺序。具体顺序如下:
所有数字类型的键按升序排列(例如,会先遍历对象属性名为 1 的属性,然后是属性名为 2 的属性,依次类推)。
所有字符串类型的键按添加顺序排列(例如,如果先添加了属性 b,后添加了属性 a,那么遍历这两个属性的顺序就是 b,a)。
所有 Symbol 类型的键按添加顺序排列。
两个对象的顺序也可能不同,取决于对象属性的排列顺序,具体请参考下面的示例。
-- -------------------- ---- ------- --- --- - - -- ---- -- ---- -- ---- -- ---- -- ---- -- --- -- -------------------------------- -- ----- ---- ---- ---- ---- ----
继承属性
Object.values() 方法只返回对象自身的可枚举属性的值,而不包含从原型链上继承的属性值。示例代码如下:
let obj = { a: 1 }; let obj1 = { b: 2 }; let obj2 = Object.create(obj1); obj2.a = 3; console.log(Object.values(obj2)); // [3]
由于 obj2 继承了 obj1 的 b 属性,因此 Object.values() 方法不会返回 b 属性的值。
参数校验
如果我们传递的不是一个对象,而是一些其他类型,例如一个字符串或数字,Object.values() 方法会抛出一个 TypeError 异常。示例代码如下:
console.log(Object.values('1234')); // TypeError: string is not iterable
Object.values() 方法的指导意义
Object.values() 方法是一个非常实用的方法,它能够快速地获取对象中所有可枚举属性的值的数组,这对于一些需要分析对象属性的场景非常有用,例如:
分析一个对象的属性集合。
快速获取一个对象的属性值列表。
将对象属性的值放入一个数组中,例如用于数据分析或可视化等场景。
案例分析
下面是一个实际场景中使用 Object.values() 方法的例子。我们有一个已经声明的对象,它是一个轮廓定制化的对象,里面包含了各种类型的属性值,现在我们需要将这些属性值按需求取出,进行某些操作,例如后面可能需要对值进行格式化、计算等。
-- -------------------- ---- ------- ----- ------ - - ----- ----- ------- ------- ---- --- -------- ----- ---- -------- ---------- ------ ------- - ------- ------------- ------- -------- ------- --------- - -- -- -------- ----- ------------ - -------- --------- ------ ----------------- ----- ------------ - -------------------- -- - ----- ---------- - --------------- -- ---- - -- ------ ------------------------ ----- -- ----------- -------- -- -- ------ ------ --- -------------------------- -- ----- ------ ------- --- --------
上面的代码使用 Object.values() 方法取值,根据 columnHeader 中的属性列表,从 person 对象中取出对应的属性值列表。使用 split 将属性分隔,使用 reduce 获取属性值。这种方法效率较高,可以用于数据处理的场景。
结论
Object.values() 方法能够帮助我们快速地获取对象中所有可枚举属性的值的数组,它是非常实用的一个方法。在使用的时候,需要注意返回数组的顺序并不一定与输入顺序一致,数组中不包含从原型链上继承的属性值,以及参数校验等问题。Object.values() 的使用场景非常广泛,我们需要注重实际应用中遇到的情况,结合实际情况使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6737c4a5317fbffedf0c4e78