ECMAScript 2017(ES8)引入了两个新的 Object 对象方法 Object.values() 和 Object.entries()。这两个方法可以让我们更高效地处理对象的键值对数据,提高编程效率,减少代码冗余。本文将会详细介绍它们的使用,以及建议的最佳实践。
Object.values()方法
Object.values() 方法和 Object.keys() 方法类似,但是不同的是,它返回的是一个对象自身可枚举属性的值的数组,而不是属性名的数组。可以看下面的示例:
const obj = { x: 'foo', y: 42, z: {} }; console.log(Object.values(obj)); // ['foo', 42, {}]
如果对象不是可枚举的,Object.values() 方法会返回一个空数组。如果传入的参数不是对象,会抛出一个 TypeError。在实际开发中,Object.values() 方法非常实用,可以帮助我们轻松地将对象的值转换为数组。
Object.entries()方法
Object.entries() 方法返回一个由对象自身可枚举属性的键值对组成的数组。数组中的每一个元素都是一个数组,包含两个元素,第一个元素是属性名,第二个元素是属性值。 如下所示:
const obj = { x: 'foo', y: 42, z: {} }; console.log(Object.entries(obj)); // [['x', 'foo'], ['y', 42], ['z', {}]]
Object.entries() 方法与 Object.keys() 和 Object.values() 方法一样,也不会返回对象自身的不可枚举属性。如果传入的参数不是对象,同样会抛出一个 TypeError。Object.entries() 方法在实际开发中常常用来遍历对象的属性。
最佳实践
- 对象的键值对数据的处理
使用 Object.values() 方法可以很容易地将对象的值转换为数组。例如,我们可以通过下面的方法获取对象中的所有属性值:
const obj = { x: 1, y: 2 }; const values = Object.values(obj); // [1, 2]
同样,我们也可以通过 Object.entries() 方法获取键值对数组,然后通过数组的遍历来访问数组中的元素:
const obj = { x: 1, y: 2 }; const entries = Object.entries(obj); for (const [key, value] of entries) { console.log(key, value); } // output: // "x" 1 // "y" 2
- 复制对象
Object.create() 方法可以让我们基于一个原型对象创建一个新的对象。但是,Object.create() 方法只能复制原型对象的属性,而不能复制对象本身的属性。因此,在一些场景下,我们需要通过 Object.assign() 方法复制对象,并使用 Object.entries() 方法获得对象的键值对数组。下面是一个简单的示例:
const obj = { x: 1, y: 2, z: {} }; const objCopy = Object.fromEntries(Object.entries(obj)); console.log(objCopy); // output: // { x: 1, y: 2, z: {} } console.log(obj === objCopy); // false console.log(obj.z === objCopy.z); // true
总结
Object.values() 和 Object.entries() 方法是 ECMAScript 2017(ES8)引入的新方法,可以帮助我们更快捷和高效地处理对象的键值对数据。使用这两个方法,我们可以轻松地将对象的值转换为数组,遍历对象的属性,复制对象的属性等,让我们的开发过程更加轻松和高效。因此,在实际开发中,我们应该熟练掌握 Object.values() 和 Object.entries() 方法的使用,善加利用它们对我们的开发工作带来的便利。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64733100968c7c53b00b046c