在前端开发中,我们经常需要操作对象。ES6 引入了 Object.values() 方法,可以返回对象自身属性的值。而在 ES8 中,对 Object.values() 方法进行了功能升级,可以扫描对象自身的可枚举属性,并返回一个数组,其中元素是对象自身所有可枚举属性的值。本篇文章将详细介绍ES8中Object.values()方法如何识别对象自身属性。
Object.values() 方法的基本使用
Object.values() 方法的基本语法如下:
Object.values(obj)
其中,obj 表示需要返回自身属性值的对象。
示例代码如下:
const obj = {foo: 'bar', baz: 42}; console.log(Object.values(obj)); //['bar', 42]
上面的代码中,obj是一个对象,有两个自身属性foo和baz。使用Object.values()方法可以返回一个包含自身属性值的数组。
Object.values() 方法如何识别对象自身属性
ES8中的Object.values()方法通过识别对象自身属性,来获取对象的具体值。下面我们来详细了解一下它的实现过程。
可枚举属性的获取
对象的属性可以通过Object.getOwnPropertyNames()方法获取,该方法可以返回一个数组,包含对象的所有属性名称。然而,需要额外判断对象属性是否可枚举,通过Object.getOwnPropertyDescriptor()方法,即可获取该属性的一些描述信息,其中包括enumerable
字段,表示该属性是否可枚举。
示例代码如下:
const obj = {foo: 'bar', baz: 42}; const properties = Object.getOwnPropertyNames(obj); for (const property of properties) { const descriptor = Object.getOwnPropertyDescriptor(obj, property); console.log(descriptor.enumerable); }
上述代码可得到foo和baz属性的enumerable
为true。
自身属性值的返回
识别对象的自身属性后,接着就是获取对应属性的值,这可以通过对对象进行遍历操作实现。最简单的方法是使用for-in循环语句,直接获取所有可枚举属性名称,以及它们对应的值。
示例代码如下:
const obj = {foo: 'bar', baz: 42}; for (const property in obj) { if (obj.hasOwnProperty(property)) { console.log(obj[property]); } }
增加Object.values()方法的性能
for-in循环虽然可以获取对象的自身属性和值,但是性能较低,在遇到大型对象时,效率会进一步降低。因此,ES8在实现Object.values()方法时引入了更高效的解决方案。可以调用另一个ES8新增的方法Object.entries(),返回对象自身可枚举属性的键值对数组,再通过array.map()方法,获取每个键值对的value值。
示例代码如下:
const obj = {foo: 'bar', baz: 42}; const entries = Object.entries(obj); const values = entries.map(entry => entry[1]); console.log(values); // ['bar', 42]
总结
ES8中的Object.values()方法具有识别对象自身属性的能力,能够高效地获取对象自身的属性值。可以使用for-in语句、Object.entries()方法和array.map()方法来实现获取自身属性值的方法。在实际项目中,应根据实际情况选择不同的方法,以提高代码性能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654a2f447d4982a6eb452236