JavaScript - Symbol 对象



JavaScript 符号(Symbol )

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

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

使用该 符号(Symbol) 时应牢记下面给出的要点。

  • 每个 Symbol 都包含唯一的值。
  • 该 Symbol 是不可变的。这意味着您无法更新 Symbol 的值。
  • Symbol 用于定义唯一的对象属性。
  • 无法更改 Symbol 的类型。

语法

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


 const sym = Symbol([description]);

此处 description 是一个可选参数。它指定了 Symbol 描述,您可以使用 'description' 属性访问该描述。

Symbol 属性

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

名称 描述
description

获取 Symbol 对象的可选描述。

asyncIterator

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

hasInstance

检查 constructor 对象是否将对象计为其实例。

isConcatSpreadable

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

iterator

返回 Symbol 的迭代器。

match

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

matchAll

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

replace

替换子字符串。

search

获取 matches 值的索引。

species

创建派生对象。

split

指定了从正则表达式匹配的索引中拆分字符串的方法。

toStringTag

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

Symbol 方法

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

名称 描述
for()

搜索给定的 Symbol 。

keyFor()

从全局 Symbol 注册表中检索密钥。

toString()

将 Symbol 转换为字符串。

valueOf()

获取 Symbol 对象的原始值。

例子

示例:创建 Symbol

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

你可以观察 '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)

示例:访问 Symbol 描述

让我们看看下面的示例,我们将在其中使用 .description 来获取 Symbol 的描述。


<html>
	 	<body>
	 	 	 <p id="output"></p>
	 	 	 <script>
	 	 	 	 	const sym = Symbol("Welcome to qikepu com...");
	 	 	 	 	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 qikepu com...

示例:每个 Symbol 都是唯一的

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

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


<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.

示例:使用 Symbol 作为对象键

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

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


<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}

使用 Symbol 的好处

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

  • 唯一属性键 − 每个 Symbol 都是唯一的,即使其描述不同。因此,您可以将该 Symbol 用作键,以避免同名键之间发生意外冲突。主要是,当您需要在两个不同的代码片段中使用对象的相同实例并需要插入相同的属性时,它很有用。
  • 不可迭代属性 - 当您在 JavaScript 中将 Symbol 添加为键并使用 for...in 循环时,循环不会遍历 Symbol 键。
  • 私有成员 − 您可以使用该 Symbol 定义 JavaScript 类中的私有属性。
  • 符号避免改写 − Symbol 是唯一的,因此可以避免覆盖类似的属性。