在 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