在 ECMAScript 2015 中,我们有新的数据类型 Symbol
。Symbol
是一种原始数据类型,用于创建唯一的标识符。它可以用作对象属性的键值,这种方式更加安全,因为不会被其他变量覆盖。
在本篇文章中,我们将学习如何使用 Symbol
做键,并提供一些示例代码帮助你了解 Symbol
的具体使用方法。
创造一个 Symbol
我们可以通过 Symbol()
函数来创建一个 Symbol
。每次调用 Symbol()
函数都会创建一个新的 Symbol
。
比如下面这个例子:
let symbol = Symbol(); console.log(typeof symbol); // 输出 "symbol"
在上面的代码中,我们创建了一个 Symbol
并使用 typeof
来查看它的类型,结果为 "symbol"。
还可以向 Symbol()
函数中传入一个字符串参数,用于描述这个 Symbol
,如下所示:
let symbol = Symbol("example"); console.log(symbol); // 输出 "Symbol(example)"
在上面的例子中,我们将字符串参数 "example" 传递给 Symbol()
函数,创建了一个描述为 "example" 的 Symbol
。当我们在控制台中输出这个 Symbol
时,会返回 "Symbol(example)"。
在本文的后续例子中,我们会经常使用一个名为 key
的 Symbol
变量,用于演示如何使用 Symbol
做键。
const key = Symbol();
使用 Symbol 做对象属性的键值
在创建了一个 Symbol
后,我们可以将它用作对象属性的键值。这种用法与字符串键值有些不同,具体的地方在于字符串键值可以被其他变量覆盖,而 Symbol
则不会。
例如下面这个例子:
-- -------------------- ---- ------- --- --- - - ----- -------- ------ --------- -- ---------------------- -- -- ------- ---------------------- -- -- --------- --- ---------- - --------- --------------- - -------- --------- ----------------------------- -- -- -------- --------
在上面的代码中,我们使用 Symbol
作为对象 obj
的一个属性键值,并将其值设置为 "example"。另外,我们也展示了如何使用另一个 Symbol
做键值,并将其值设置为 "another example"。
需要注意的是,使用 Symbol
作为对象属性的键值,它不会出现在对象的 for…in
循环中和 Object.keys()
、JSON.stringify()
的结果中,因此更适合用作私有属性。
Symbol.for() 和 Symbol.keyFor()
Symbol.for()
和 Symbol.keyFor()
是两个实用的函数,可以用来创建全局的共享 Symbol,从而能够在多个对象之间共享 Symbol
的键值。
当我们使用 Symbol()
函数时,每次调用都会创建一个新的 Symbol
。这意味着即使两个 Symbol
的描述相同,它们也不是相同的。
但是,当我们使用 Symbol.for()
函数时,会为每个传入的 key 创建一个全局 Symbol。如果多次使用相同的 key 调用 Symbol.for()
,它会返回同一个 Symbol
。
const globalSymbol = Symbol.for("key"); const anotherGlobalSymbol = Symbol.for("key"); console.log(globalSymbol === anotherGlobalSymbol); // 输出 true
在上面的代码中,我们调用 Symbol.for("key")
创建 Symbol
。全局 Symbol 的 intenral description 为 "key",并且该函数始终返回相同的 Symbol
。
此外,您还可以使用 Symbol.keyFor()
函数来查找全局 Symbol 的 key。
const globalSymbol = Symbol.for("key"); console.log(Symbol.keyFor(globalSymbol)); // 输出 key
在上面的例子中,我们查找了 Symbol.for("key")
创建的全局 Symbol
的 key,结果为 "key"。
总结
在本文中,我们学习了如何使用 Symbol
做键,并提供了一些示例代码,如何使用 Symbol.for()
和 Symbol.keyFor()
在不同的对象之间共享 Symbol
的键值。现在,您应该可以自信地在项目中使用 Symbol
了!
-- -------------------- ---- ------- ----- --- - --------- --- --- - - ----- -------- ------ --------- -- ---------------------- -- -- ------- ---------------------- -- -- --------- --- ---------- - --------- --------------- - -------- --------- ----------------------------- -- -- -------- -------- -------------------------------------------------------- ----- ------------ - ------------------ ----- ------------------- - ------------------ ------------------------ --- --------------------- -- -- ---- -------------------------------------------------------- ----- ------------ - ------------------ ----------------------------------------- -- -- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b38af648841e9894fd2a57