JavaScript中的“符号”原始数据类型是啥[重复]

Posted

技术标签:

【中文标题】JavaScript中的“符号”原始数据类型是啥[重复]【英文标题】:What is the "symbol" primitive data type in JavaScript [duplicate]JavaScript中的“符号”原始数据类型是什么[重复] 【发布时间】:2016-08-16 06:49:18 【问题描述】:

ES6 自带的新原始类型是 Symbol 类型。简短的定义说:

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

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

感谢您的回答。

【问题讨论】:

更多(更好)重复:What is the point of the 'Symbol' type in ECMA-262-v6?,Why bring symbols to javascript? 【参考方案1】:

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

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

无符号示例:

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

【讨论】:

不,Symbols 没有任何隐私。它们对独特性很有用。

以上是关于JavaScript中的“符号”原始数据类型是啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 新增两个原始数据类型

JavaScript 新增两个原始数据类型

JavaScript 又新增两个原始数据类型

JavaScript即将推出新的两个原始数据类型

JavaScript即将推出新的两个原始数据类型

JavaScript即将推出新的两个原始数据类型