在前端开发中,我们经常需要获取对象中的值,遍历对象并复制该对象的所有属性,或删除对象属性等操作。在 ES8 中,Object.values() 方法提供了一种更加高效和简单的遍历对象属性值的方式,本文将介绍这个方法的使用方法以及常见问题的解决方案。
Object.values() 方法的使用
Object.values() 方法的用法非常简单,其实就是返回对象中所有可枚举属性的值。具体使用方法如下:
const obj = {a: 'hello', b: 'world'}; Object.values(obj); // ["hello", "world"]
对于数组和类数组对象,可以使用.slice()方法将其转换为纯对象,然后再使用Object.values()方法。
const arr = ['hello', 'world']; Object.values(arr); // 报错 Object.values({...arr}); // ["hello", "world"] const nodeList = document.querySelectorAll('div'); Object.values(nodeList); // 报错 Object.values({...nodeList}); // [div, div, div, div]
在组件中获取props中所有值:
const obj = { a: 'hello', b: 'world' }; const values = Object.values(obj); values.forEach((value, index) => { console.log(value); // output: hello,world });
常见问题解决
不支持 Internet Explorer 浏览器
首先,Object.values()方法不支持Internet Explorer浏览器,如果要在IE中使用这个方法,可以使用类似 polyfill 的东西进行兼容,或者使用ES6转ES5的插件功能实现兼容。
Polyfill方式:
-- -------------------- ---- ------- -- ---------------- - ------------- - ------------- - -- ---- --- ------------ ----- --- ------------------------ ------ -- - ------------- --- ----------- --- ---- -- ---- - -- ----------------------------------------------- - ------------------- - - ------ ---- - -
只能获取可枚举属性值
其次,Object.values()方法只能获取对象中所有可枚举属性的值。如果属性不可枚举或者 Symbol 类型,Object.values()方法将无法获取该属性的值。
-- -------------------- ---- ------- ----- --- - - -- -------- -- ------- -- -------------------------- ---- - ------ ------- ----------- ------ --- -------------------------- ------------ - ------ ------- --- ------------------- -- --------- --------
以上例子中,属性c不可枚举,Symbol类型的属性d也无法获取到其属性值。
数组的索引作为属性值
对于数组来说,数组的索引号将被作为属性值,而不是属性名。
const arr = ['hello', 'world']; Object.values(arr); // ["hello", "world"] Object.entries(arr); // [["0", "hello"], ["1", "world"]]
结论
Object.values() 方法是一种极其方便的方法,能快速获取对象的值并对其进行遍历操作,帮助我们更好地处理对象。不过,需要注意该方法只支持现代浏览器并且只能获取可枚举属性的值,同时在操作数组时要注意其索引作为属性值的情况。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ff4840496981cd7bcc1b00