Symbol
symbol 是ES6标准新增基本数据类型 。
Symbol()
Symbol()函数会返回symbol类型的值,该symbol具有暴露内建成员对象的静态属性和暴露全局Symbol注册的静态方法。
Symbol()函数的使用类似于内建对象类,但作为构造函数来说它并不完整,也不支持 new Symbol()语法。
const symbol0 = Symbol(0);
const symbol1 = Symbol();
const symbol2 = Symbol('');
const symbol3 = Symbol('a');
const symbol4 = Symbol('a');
console.log(typeof symbol0);
// "symbol"
console.log(symbol0 === 0);
// false
console.log(symbol1.toString());
// "Symbol()"
console.log(symbol2.toString());
// "Symbol()"
console.log(symbol1 === symbol2);
// false
console.log(symbol1.toString() === symbol2.toString());
// true
console.log(symbol3.toString());
// "Symbol(a)"
console.log(symbol3 === symbol4);
// false
Symbol.for(key)
Symbol.for(key)方法使用给定的key在运行时全局Symbol注册表中搜索,如果找到则将其返回。否则将使用此key在全局Symbol注册表中创建一个的symbol。
const symbol0 = Symbol()
// 创建了key为undefined的symbol
const symbol1 = Symbol.for()
// 创建了key为"undefined"的symbol
const symbol2 = Symbol.for('a')
// 创建了key为a的symbol
const symbol3 = Symbol.for('a')
// 返回了key为a的symbol
console.log(symbol1 === symbol2);
// false
console.log(symbol2 === symbol2);
// true
Symbol.keyFor(symbol)
Symbol.keyFor(symbol)方法使用给定的symbol在运行时全局Symbol注册表中搜索该symbol的key,如果找到则将其返回。否则返回undefined。
const symbol0 = Symbol()
// 创建了key为undefined的symbol
const symbol1 = Symbol.for()
// 创建了key为"undefined"的symbol
const symbol2 = Symbol.for('a')
// 创建了key为a的symbol
const key0 = Symbol.keyFor(symbol0 )
// 返回了symbol0 的 key
const key1 = Symbol.keyFor(symbol1 )
// 返回了symbol1 的 key
const key2 = Symbol.keyFor(symbol2 )
// 返回了symbol2 的 key
console.log(key0);
// undefined
console.log(key1);
// "undefined"
console.log(key2);
// "a"