ES8 中新增了 Object.values() 和 Object.entries() 方法,用于获取对象的所有值和键值对,这些方法能够极大地简化开发者的代码编写工作,本文将详细介绍 ES8 如何实现 Object.values() 和 Object.entries() 方法的具体实现过程。
Object.values() 方法的实现
Object.values() 方法用于获取给定对象中的所有值,并将这些值返回一个数组。具体的实现代码如下:
-- -------------------- ---- ------- -- ---------------- - ------------- - ------------- - -- ---- -- ----- - ----- --- ------------------------ ------ -- ------------- - --- ------ - --- --- ---- --- -- ---- - -- ------------------------------------------ ----- - ---------------------- - - ------ ------- -- -
上述代码实现了 Object.values() 方法的具体实现过程。当代码调用 Object.values() 方法时,如果该方法未被实现则会动态地为该方法添加一个实现,并在实现中遍历对象的所有属性,将每个属性的值存储在数组中,最终将数组返回。
Object.entries() 方法的实现
Object.entries() 方法用于获取给定对象中的所有键值对,以数组形式返回。这里提供一个实现代码如下:
-- -------------------- ---- ------- -- ----------------- - -------------- - ------------- - -- ---- -- ----- - ----- --- ------------------------- ------ -- ------------- - --- ------ - --- --- ---- --- -- ---- - -- ------------------------------------------ ----- - ----------------- ----------- - - ------ ------- -- -
上述代码实现了 Object.entries() 方法的具体实现过程。同样,当代码调用 Object.entries() 方法时,如果该方法未被实现,则会动态地为该方法添加一个实现,并在实现中遍历对象的所有属性,并将每个属性和对应的值作为数组成员存储在一个新的数组中,最终将该数组返回。
示例代码
下面给出使用 Object.values() 和 Object.entries() 方法的一些示例代码,以帮助读者更好地理解这两个方法的用途和实现过程。
示例1:使用 Object.values() 方法
var obj = { a: 1, b: 2, c: 3 }; var result = Object.values(obj); console.log(result);
这段代码中,首先定义了一个对象 obj,该对象包含了三个属性,然后调用 Object.values() 方法获取该对象的所有值,并将结果存储在 result 变量中,最后将 result 变量打印出来即可。
输出结果: [1, 2, 3]
示例2:使用 Object.entries() 方法
var obj = { a: 1, b: 2, c: 3 }; var result = Object.entries(obj); console.log(result);
这段代码中,同样首先定义了一个对象 obj,然后调用 Object.entries() 方法获取该对象的所有键值对,并将结果存储在 result 变量中,最后将 result 变量打印出来即可。
输出结果: [[a, 1], [b, 2], [c, 3]]
总结
正如本文所述,Object.values() 和 Object.entries() 方法能够大大简化开发者的代码编写工作。而它们的实现原理也不难,只需遍历对象的所有属性,将属性值或键值对存储在一个数组中即可。然而,这两个方法也需要开发者注意一些细节,例如当对象为 null 或者 undefined 时调用这两个方法会抛出异常等。因此,在实际开发中需要根据具体情况选择使用适合的方法,以提高代码的性能和可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645bb531968c7c53b0e02d6b