Symbol

Tags
javascript
Created
May 25, 2016 2:02 PM

// Symbol.unscopables 将属性排除在 with (严格模式不能写with)环境之外

Symbol("foo") === Symbol("foo"); // false

var sym = new Symbol(); // TypeError

这会创建一个显式的符号包装器对象而不是一个新的符号值。

围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持

然而,现有的原始包装器对象,如 new Boolean、 new String以及new Number因为遗留原因仍可被创建

创建一个原始包装器对象(wrapper object),可以使用 Object() 函数:

var sym = Symbol("foo");

typeof sym; // "symbol"

var symObj = Object(sym);

typeof symObj; // "object"

Object(123) // new Object(123)

在全局符号注册表中创建和检索共享符号:

Symbol.for(key)     使用给定的key搜索现有符号,如果找到则返回符号。否则将得到一个新的使用给定的key在全局符号注册表中创建的符号。Symbol.keyFor(sym)     为给定符号从全局符号注册表中检索一个共享符号键。

获取对象上的符号属性(不可枚举)。

Object.getOwnPropertySymbols()

Object.getOwnPropertyNames() 只会包含字符串类型的属性键

Well-known symbols

The Symbol.unscopables well-known symbol is used to specify an object value of whose own and inherited property names are excluded from the with environment bindings of the associated object.

SuperMade with Super