javascript - JavaScript 中的 "symbol"原始数据类型是什么

标签 javascript ecmascript-6 symbols primitive-types

<分区>

新的基本类型是 ES6 自带的 Symbol 类型。简短的定义是:

符号是唯一且不可变的数据类型,可用作对象属性的标识符。符号对象是符号原始数据类型的隐式对象包装器。

我做了一些研究,但我不明白为什么我们需要这种原始类型?

感谢您的回答。

最佳答案

这种原始类型对于所谓的“私有(private)”和/或“唯一” key 很有用。

使用符号,您知道不共享此实例(而不是字符串)的其他人将无法在 map 上设置特定属性。

没有符号的例子:

var map = {};
setProp(map);
setProp2(map);

function setProp(map) {
  map.prop = "hey";
}
function setProp2(map) {
  map.prop = "hey, version 2";
}

在这种情况下,第二个函数调用将覆盖第一个函数中的值。

然而,对于符号,我们不只是使用“字符串 prop”,而是使用实例本身:

var map = {};
var symbol1 = Symbol("prop");
var symbol2 = Symbol("prop"); // same name, different instance – so it's a different symbol!
map[symbol1] = 1;
map[symbol2] = 2; // doesn't override the previous symbol's value
console.log(map[symbol1] + map[symbol2]); // logs 3

关于javascript - JavaScript 中的 "symbol"原始数据类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797206/

相关文章:

javascript - html5游戏中的音效

javascript - HTML 单击表头时显示/隐藏表的部分内容

debugging - 如何使用windbg查看c#变量

common-lisp - 关键字命名空间污染

c - 我可以使某些符号仅对其他图书馆成员可见吗?

javascript - 在 "\n"和 "<br>"之间切换

javascript - Angularjs 根据输入查询动态更改 CSS 类的最佳方法

javascript - Spread syntax 和 Typescript——提供的参数不匹配?

javascript - JS : Split function into kind of module parts

javascript - 通过 id 从列表中检索多个项目