ES6 中 Symbol 对象的应用及注意事项

在 ES6 中,Symbol 是一种全新的原始数据类型,它可以用来创建唯一的、不可变的值。Symbol 值可以作为对象属性的标识符使用,这使得我们可以创建一些非常有用的特性。

1. Symbol 的基本用法

要创建一个 Symbol 值,我们可以使用全局的 Symbol() 函数,并传递一个可选的字符串作为参数,该参数用于 Symbol 的描述。

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

每个 Symbol 值都是唯一的,即使它们的描述相同。

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

2. Symbol 作为对象属性的标识符

Symbol 可以用作对象属性的标识符,这使得我们可以创建一些非常有用的特性。我们可以使用 Symbol 作为属性名来创建一些私有属性,这些属性不会被 for...in 循环、Object.keys() 和 JSON.stringify() 等方法遍历到。

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

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

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

3. Symbol 的一些注意事项

3.1. Symbol 不能被 new 操作符调用

Symbol 是原始数据类型,不能被 new 操作符调用。如果我们尝试这样做,会抛出一个 TypeError。

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

3.2. Symbol 不能被隐式转换为字符串

Symbol 值不能被隐式转换为字符串。如果我们尝试这样做,会得到一个 TypeError。

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

3.3. Symbol.for() 和 Symbol.keyFor()

Symbol.for() 方法可以用来创建或获取一个全局的 Symbol 值。如果我们传递一个字符串作为参数,它会在全局的 Symbol 注册表中查找该字符串对应的 Symbol 值。如果找到了,就返回该 Symbol 值;否则,就创建一个新的 Symbol 值,并将其注册到全局的 Symbol 注册表中。

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

Symbol.keyFor() 方法可以用来获取一个已经在全局的 Symbol 注册表中注册过的 Symbol 值对应的字符串。

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

4. 总结

Symbol 是一种全新的原始数据类型,它可以用来创建唯一的、不可变的值。Symbol 可以用作对象属性的标识符,这使得我们可以创建一些非常有用的特性。在使用 Symbol 时,需要注意一些细节,比如不能被 new 操作符调用,不能被隐式转换为字符串,以及使用 Symbol.for() 和 Symbol.keyFor() 方法时需要注意全局 Symbol 注册表。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65f7b02bd10417a2222f9ec2