ES8 中新增的 Object.values() 方法
在 JavaScript 中,Object 是一个常用的内置对象,它表示一组键值对,其中键是字符串类型,值可以是任意类型。在 ES6 中,为了支持更复杂的数据结构,JavaScript 引入了 Map 和 Set 对象。为了方便处理这些对象,ES8 中引入了新的 Object.values() 方法。
Object.values() 方法的作用是返回一个对象中所有值的数组,数组里的值按照属性插入的顺序排列,和 for...in 循环遍历的顺序一致。如果属性是继承而来的,Object.values() 不会返回这个继承属性的值。
Object.values() 的语法如下:
Object.values(obj);
其中 obj 表示要返回值的对象。
下面我们来看一些示例代码。
示例 1:
const obj = { foo: 'bar', baz: 42 }; console.log(Object.values(obj)); // ['bar', 42]
在这个例子中,我们定义了一个对象 obj,它有两个属性 foo 和 baz,分别对应字符串 ‘bar’ 和数字 42。我们使用 Object.values() 来返回这个对象的所有值,并将返回的数组打印出来。
示例 2:
const myMap = new Map(); myMap.set('0', 'foo'); myMap.set(1, 'bar'); myMap.set({}, 'baz'); console.log(Object.values(myMap)); // TypeError: myMap is not iterable
在这个例子中,我们创建了一个 Map 对象 myMap,它包含了三个键值对。我们使用 Object.values() 来获取 myMap 的所有值,但是我们会发现当我们尝试执行这段代码时,会抛出一个 TypeError。这是因为 Object.values() 只支持普通的对象,对于 Set 或 Map 等对象不适用。
示例 3:
const mySet = new Set(['foo', 42, { bar: 'baz' }]); console.log(Object.values(mySet)); // TypeError: mySet is not iterable
与例子 2 相似,在这个例子中,我们创建了一个 Set 对象 mySet,它包含了三个值。当我们使用 Object.values() 尝试获取 mySet 的所有值时,会抛出一个 TypeError。
以上两个例子都会抛出 TypeError,原因在于 Set 和 Map 对象并不是 iterable 对象,而 Object.values() 方法只能处理 iterable 对象。不过,如果我们想要将 Set 或 Map 对象转换成数组,可以使用 Array.from() 方法。
示例 4:
const mySet = new Set(['foo', 42, { bar: 'baz' }]); console.log(Array.from(mySet)); // ['foo', 42, { bar: 'baz' }]
在这个例子中,我们使用 Array.from() 方法将 mySet 转换成数组并打印出来。
从以上示例可以看出,Object.values() 方法只能处理普通的对象,对于 Map 和 Set 对象需要使用其他方法进行处理。不过在处理普通对象时,Object.values() 会非常方便,可以遍历对象的所有值,将它们转成数组进行操作。
总结:
在 ES8 中,Object.values() 方法可以返回一个对象的所有值,并将它们转成数组,但只支持普通的对象,不能处理 Map 和 Set 等对象。如果需要处理 Map 和 Set 对象,可以使用其他方法,比如 Array.from() 方法将它们转成数组。Object.values() 方法在处理普通对象时非常方便,可以遍历对象的所有值,将它们转成数组进行操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649a42f348841e989471fea4