Symbol
// 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.getOwnPropertyNames() 只会包含字符串类型的属性键
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.