symbol是es6新出的原始数据类型,symbol主要用于防止属性名冲突而产生的,保证属性名的唯一性。
创建一个symbol数据类型
var sy = Symbol();
console.log(typeof sy);
//输出: Symbol
描述参数
var sy1 = Symbol("this is a Symbol");
var sy2 = Symbol("this is a Symbol");
console.log(sy1 == sy2);
输出:false
从上面可以看出虽然两个symbol的描述参数是一样的但是两个却不是同一个Symbol。
Symbol.for
根据描述获取Symbol,如果不存在则新建一个Symbol,会在系统进行登记
var sy1 = Symbol.for("symbol");
var sy2 = Symbol.for("symbol");
console.log(sy1 == sy2);
//输出:true
之所以输出true是因为Symbo.forl在系统进行的登记,sy1和sy2是同一个Symbol。
Symbol.keyFor
Symbol.keyFor 根据使用Symbol.for登记的Symbol返回描述。这里要注意的是Symbol.keyFor只能获取Symbol.for登记的描述,通过这种Symbol(“this is a Symbol”)方式添加的描述,Symbol.keyFor无法获取。
var sy1 = Symbol.for("test");
console.log(Symbol.keyFor(sy1));
let sy2 = Symbol("test");
console.log(Symbol.keyFor(sy2));
输出:test,undefinded