ECMAScript 2019 中的 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols()

阅读时长 4 分钟读完

在前端开发中,我们经常需要操作对象。ECMAScript 2019(也称为 ECMAScript 10)引入了两个新的方法 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols(),可以让我们更加高效灵活地操作对象。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。如果对象没有自身属性,则返回空数组。

语法

参数

  • obj:要返回其属性的对象。

返回值

一个由指定对象的所有自身属性的属性名组成的数组。

示例

上述代码中,obj 对象有三个属性:name、age 和一个 Symbol 类型的属性 gender。Object.getOwnPropertyNames() 方法返回一个数组,包含 obj 对象的所有自身属性的属性名,即 ['name', 'age']。

Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols() 方法返回一个由指定对象的所有自身 Symbol 类型的属性名组成的数组。如果对象没有自身 Symbol 类型的属性,则返回空数组。

语法

参数

  • obj:要返回其属性的对象。

返回值

一个由指定对象的所有自身 Symbol 类型的属性名组成的数组。

示例

上述代码中,obj 对象有三个属性:name、age 和一个 Symbol 类型的属性 gender。Object.getOwnPropertySymbols() 方法返回一个数组,包含 obj 对象的所有自身 Symbol 类型的属性名,即 [Symbol(gender)]。

使用场景

Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() 方法可以在以下场景中使用:

  1. 遍历对象的所有属性。
-- -------------------- ---- -------
----- --- - -
  ----- -----
  ---- ---
  ------------------- ------
--

----- ---------- - -
  -----------------------------------
  ------------------------------------
--

--------------------------- -- -
  ------------------------- -------------------
---

上述代码中,使用扩展运算符将 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() 方法返回的数组合并成一个数组 properties,然后遍历该数组,打印出每个属性的值。

  1. 判断对象是否包含某个属性。
-- -------------------- ---- -------
----- --- - -
  ----- -----
  ---- ---
  ------------------- ------
--

-- -------------------------------------------------- -
  ---------------- -- ---- -----
-

-- -------------------------------------------------------------- -
  ---------------- -- ------ -----
-

上述代码中,使用 Object.getOwnPropertyNames() 方法判断 obj 对象是否包含 name 属性,使用 Object.getOwnPropertySymbols() 方法判断 obj 对象是否包含 Symbol 类型的属性 gender。

总结

Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() 方法可以让我们更加高效灵活地操作对象。在实际开发中,我们可以根据实际需求灵活运用这两个方法,提高开发效率和代码质量。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/660f5fa1d10417a222fd553c

纠错
反馈