JavaScript - Symbol 对象



JavaScript Symbol

在 JavaScript 中,Symbol 是一种原始数据类型,它是在 ECMAScript 6 (ES6) 中引入的。它可以使用 'Symbol' 构造函数创建。

与其他原始数据类型(如字符串或数字)不同,Symbol 是不可变的且唯一的。它们在需要唯一标识符的情况下特别有用,因为它们提供了一种创建私有对象属性并避免命名冲突的方法。在这里,我们列出了与符号相关的属性和方法。

在使用符号时,您应该牢记以下几点。

  • 每个符号包含唯一的值。

  • 符号是不可变的。这意味着您无法更新符号的值。

  • 符号用于定义唯一的对象属性。

  • 符号的类型不能更改。

语法

您可以按照以下语法使用 Symbol() 函数创建一个新符号。−

const sym = Symbol([description]);

这里 description 是一个可选参数。它指定符号描述,您可以使用 'description' 属性访问它。

Symbol 属性

在下表中,我们列出了 Symbol 的所有属性:−

序号 名称和描述
1 description

获取符号对象的可选描述。

2 asyncIterator

将对象更改为异步可迭代对象。

3 hasInstance

检查构造函数对象是否将对象计算为其实例。

4 isConcatSpreadable

确定在使用 array.concat() 方法时,数组应作为对象还是扁平化数组连接。

5 iterator

返回符号的迭代器。

6 match

将正则表达式与字符串匹配。

7 matchAll

返回正则表达式与字符串的所有匹配项。

8 replace

替换子字符串。

9 search

获取匹配值的索引。

10 species

创建派生对象。

11 split

指定将字符串从正则表达式匹配的索引处分割的方法。

12 toStringTag

为对象创建默认字符串描述。

Symbol 方法

在下表中,我们列出了 Symbol 的所有方法:−

序号 名称和描述
1 for()

搜索给定的符号。

2 keyFor()

从全局符号注册表中检索键。

3 toString()

将符号转换为字符串。

4 valueOf()

获取符号对象的原始值。

示例

示例:创建符号

在下面的示例中,我们使用 Symbol() 函数创建了一个新符号。此外,我们在定义 sym2 符号时传递了字符串参数。

您可以观察 'sym1' 的类型,它是 'symbol',一个原始值。

<html>
   <body>
      <p id="output"></p>
      <script>
         const sym1 = Symbol();
         document.getElementById("output").innerHTML = 
			"The sym1 is: " + sym1.toString() + "<br>" +
         "The type of sym1 is: " + typeof sym1 + "<br>";
         const sym2 = Symbol("description");
         document.getElementById("output").innerHTML += "The sym2 is: " + sym2.toString();
      </script>
   </body>
</html>

输出

当我们执行上述脚本时,它将生成一个输出,其中包含在网页上显示的文本。

The sym1 is: Symbol()
The type of sym1 is: symbol
The sym2 is: Symbol(description)

示例:访问符号描述

让我们看看下面的示例,我们将使用 .description 获取符号的描述。

<html>
   <body>
      <p id="output"></p>
      <script>
         const sym = Symbol("Welcome to Tutorials Point...");
         document.getElementById("output").innerHTML = 
			"The sym description of the symbol is : " + sym.description;
      </script>
   </body>
</html>

输出

执行上述脚本后,将弹出输出窗口,显示网页上的文本。

The sym description of the symbol is : Welcome to Tutorials Point...

示例:每个符号都是唯一的

在下面的示例中,我们定义了 sym1 和 sym2 符号。之后,我们比较这两个变量并相应地打印消息。

这两个符号看起来相似但不同,您可以在输出中看到。

<html>
   <body>
      <p id="output"></p>
      <script>
         const sym1 = Symbol();
         const sym2 = Symbol();
         
         if (sym1 == sym2) {
            document.getElementById("output").innerHTML += "Sym1 and Sym2 are equal.";
         } else {
            document.getElementById("output").innerHTML += "Sym1 and Sym2 are not equal.";
         }
      </script>
   </body>
</html>

输出

执行后,它返回一个文本,指示这两个符号不相等。

Sym1 and Sym2 are not equal.

示例:使用符号作为对象键

符号的主要用途是将其用作对象键。这里,我们使用了 'objId' 符号作为键。

当我们将对象转换为字符串或遍历对象属性时打印对象时,它不会打印符号。因此,符号可以帮助开发人员使对象属性私有。

<html>
   <body>
      <p id="output">The object is: </p>
      <script>
         const objId = Symbol();
         const person = {
            name: "John Doe",
            age: 30,
            [objId]: "abcd123",
         }
         document.getElementById("output").innerHTML += JSON.stringify(person);
      </script>
   </body>
</html>

输出

如果我们执行上述程序,它将生成一个包含网页上显示的文本的输出。

The object is: {"name":"John Doe","age":30}

使用符号的优势

在这里,我们解释了在实时开发中使用符号的优势。

  • 唯一的属性键 - 每个符号都是唯一的,即使其描述不同。因此,您可以使用符号作为键来避免具有相同名称的键之间意外冲突。主要是在您需要在两个不同的代码片段中使用对象的相同实例并且需要插入相同的属性时很有用。

  • 不可迭代的属性 - 当您将符号作为键添加到 JavaScript 中并使用 for...in 循环遍历对象属性时,循环不会遍历符号键。

  • 私有成员 - 您可以使用符号在 JavaScript 类中定义私有属性。

  • 避免覆盖 - 符号是唯一的,因此它避免了覆盖类似的属性。

广告