Symbols 不能使用 "new" 关键字来创建
因为 symbols 不是对象, 而 new 关键字返回了一个对象, 我们不能使用 new 返回一个 symbols 数据类型.
var mySymbol = new Symbol(); //throws error
Symbols 有 "描述"
Symbols 可以包含一个描述 -- 就是为了记录日志而使用.
- //mySymbol variable now holds a "symbol" unique value
- //its description is "some text"
- const mySymbol = Symbol('some text');
Symbols 具有唯一性
- const mySymbol1 = Symbol('some text');
- const mySymbol2 = Symbol('some text');
- mySymbol1 == mySymbol2 // false
如果我们使用 "Symbol.for" 方法, Symbols 表现的像单例模式
如果不通过 Symbol() 创建 Symbol , 你可以调用 Symbol.for(<key>) . 它需要传一个 "key"(string) 来创建一个 Symbol . 如果这个 key 对应的 symbol 已经存在了, 就会简单返回之前的 symbol ! 因此如果我们调用 Symbol.for 方法, 它就会表现的像一个单例模式.
- var mySymbol1 = Symbol.for('some key'); //creates a new symbol
- var mySymbol2 = Symbol.for('some key'); //**returns the same symbol
- mySymbol1 == mySymbol2 //true
使用 .for 的实际运用就是在一个地方创建一个 Symbol , 然后在其他地方访问相同的 Symbol .
警告: Symbol.for 会使 symbol 不具有唯一性, 因此如果 key 相同, 你最后会重写里面的值. 如果可能的话, 尽量避免这么做!
来源: http://www.tuicool.com/articles/NZ36BfZ