ES6 新特性:Symbol 使用详解

阅读时长 4 分钟读完

ES6 中引入了一种新的基本数据类型 —— Symbol。Symbol 是一种类似于字符串的数据类型,但可以保证唯一性,它通常被用作对象属性的键。相较于字符串键,Symbol 键具有更高的安全性、可扩展性和语义清晰性。

创建 Symbol

创建 Symbol 的主要方式是使用全局的 Symbol() 函数,它将生成一个唯一的、不可变的 Symbol 值。其中,Symbol 函数可以接收一个可选的字符串参数,用于描述 Symbol 的含义,但并不影响 Symbol 的唯一性。

使用 Symbol

作为对象属性名

Symbol 可以作为对象属性名,使用方式与字符串键类似:

避免属性名冲突

在 JavaScript 中,同名属性会发生覆盖,导致之前的属性内容丢失。而使用 Symbol 作为属性名可以避免这种情况的发生。

遍历 Symbol 属性

使用 Object.keys() 方法或 for...in 循环无法遍历 Symbol 属性。相应的,新增了两种方法:Object.getOwnPropertySymbols()Reflect.ownKeys()

Symbol 的应用场景

1. 静态变量

在 JavaScript 中,没有明确的静态变量概念。但使用 Symbol 可以模拟出静态变量的效果,同时避免全局变量污染。

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

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

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

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

2. 私有属性

JavaScript 中没有私有属性的概念,在对象中定义的属性都是公开的。但使用 Symbol 可以实现私有属性的效果,即外部无法访问或修改该属性。

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

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

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

3. 枚举属性

通常情况下,对象属性都是可枚举的,即可以通过 for...in 循环或 Object.keys() 方法遍历。但使用 Symbol 定义的属性默认是不可枚举的,可以用于隐藏对象属性。

总结

Symbol 是一种新的基本数据类型,它具有唯一性、安全性、可扩展性和语义清晰性等优势。在对象中使用 Symbol 做为属性名,可以避免属性名冲突和通过枚举方法避免属性被遍历。Symbol 还可以模拟静态变量和实现私有属性等功能,是非常有用的一种数据类型。

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

纠错
反馈