TypeScript入门与实战
上QQ阅读APP看书,第一时间看更新

3.3.6 Symbol

Symbol是ECMAScript 2015新引入的原始类型。Symbol值有一个重要特征,那就是每一个Symbol值都是唯一的且不可改变的。Symbol值的主要应用场景是作为对象的属性名。

Symbol的设计初衷是用来实现对象的私有属性,但实际上Symbol并不能实现真正意义上的私有属性。JavaScript还是提供了一些方法允许程序去访问Symbol属性。虽然Symbol无法实现绝对的私有属性,但是它确实有助于缓解属性命名冲突问题。

3.3.6.1 Symbol()

JavaScript提供了一个全局的“Symbol()”函数来创建Symbol类型的值。我们可以将“Symbol()”函数想象成GUID(全局唯一标识符)的生成器,每次调用“Symbol()”函数都会生成一个完全不同的Symbol值。示例如下:


01 const sym = Symbol();
02 const obj = { [sym]: 'some value' };
03 obj[sym]; // 'some value'

3.3.6.2 Well-Known Symbol

JavaScript内置了一些所谓的Well-Known Symbol常量。这些Symbol常量用作对象属性名,它们的功能是定制对象的特定行为。在ECMAScript 2015规范中一共定义了11个Well-Known Symbol常量,如表3-1所示。

表3-1 Well-Known Symbol常量