ES6中新增了一些操作对象的方法,其中包括了 Object.keys()
和 Object.values()
。这两种方法让我们可以更加方便地操作对象,提高我们的生产效率。本文将介绍使用这两个方法的正确方法,以及相关的技巧和限制。
Object.keys()
Object.keys()
方法返回一个数组,包含给定对象所有可枚举的own属性的键名。简单来说,该方法就是把对象的 key 值取出来,组成一个数组返回。用法如下所示:
const obj = { a: 1, b: 2, c: 3 }; const keys = Object.keys(obj); console.log(keys); // ['a', 'b', 'c']
当然,该方法也可以用于迭代某个对象的实例属性,例如:
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - - ----- ---- - --- -------------- ---- ----- ---- - ------------------ ------------------ -- -------- ------
需要注意的是,如果想要获取到对象的所有属性,应该使用 Reflect.ownKeys()
方法。这个方法返回所有的 own key,包括不可枚举属性和 Symbol 类型的属性。
Object.values()
Object.values()
方法返回一个数组,包含给定对象的所有可枚举属性的值。用法如下所示:
const obj = { a: 1, b: 2, c: 3 }; const values = Object.values(obj); console.log(values); // [1, 2, 3]
同 Object.keys()
方法一样,它也可以用于迭代某个对象的实例属性。
需要注意的是,该方法仅返回 object 的 own enumerable property。如果想要拿到所有 property 的 value,需使用 for...in 循环。不过 for...in
会循环出对象原型链上的属性,用起来要小心。
实际应用
上述方法通常在数组对象迭代的时候比较有用,比如:
const obj = { a: 1, b: 2, c: 3 }; for (const [key, value] of Object.entries(obj)) { console.log(key, value); // a 1 // b 2 // c 3 }
还有一种常见的应用场景是当我们需要把某个对象转化为 map 时,我们可以使用 Object.entries()
方法,然后再用 Map
构造函数来创建一个新的 Map 对象。例如:
const obj = { a: 1, b: 2, c: 3 }; const map = new Map(Object.entries(obj)); console.log(map); // Map { 'a' => 1, 'b' => 2, 'c' => 3 }
总结
以上就是使用 ES6 中对象的 keys
和 values
方法的正确姿势了。值得注意的是,这两个方法只返回对象的可枚举own属性,并且都不包括Symbol类型的属性。当我们用于构造对象的 map 时,需要注意区分键名所属的实体。希望提供的方法对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6479c655968c7c53b05bb493