JavaScript - Symbol 对象
JavaScript Symbol 对象
在 JavaScript 中,Symbol 是一种原始数据类型,它是在 ECMAScript 6 (ES6) 中引入的。它可以使用"Symbol"构造函数创建。
与字符串或数字等其他原始数据类型不同,Symbol 是不可变且唯一的。它们在需要唯一标识符的情况下尤其有用,因为它们提供了一种创建私有对象属性并避免命名冲突的方法。这里,我们列出了与 Symbol 相关的属性和方法。
使用 Symbol 时,您应该牢记以下几点。
每个 Symbol 都包含唯一的值。
Symbol 是不可变的。这意味着您无法更新符号的值。
符号用于定义唯一的对象属性。
符号的类型无法更改。
语法
您可以按照以下语法使用 Symbol() 函数创建一个新的符号。−
const sym = Symbol([description]);
其中 description 是可选参数。它指定符号的描述,您可以使用"description"属性访问。
Symbol 符号属性
下表列出了符号的所有属性 -
| Sr.No. | 名称和描述 |
|---|---|
| 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 的所有方法 -
| Sr.No. | 名称 & 说明 |
|---|---|
| 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 类中的私有属性。
避免覆盖 − 该符号是唯一的,因此可以避免覆盖相似的属性。

