symbol访问法及symbor注册表
symbol主要作用是防止对象属性名冲突
在ES6之前,对象的属性名只能是字符串,这样很容易造成字符串的冲突。
例:假设person对象是从外部库引入的一个对象
let person = { name: 'xiaoqian', age : 18 } console.log(person.name);// xiaoqian person.name = 'xiaojia'; console.log(person.name);// xiaojia
在不同的代码共享一个symbol,可使用symbo. for()方法来创建一个共享的symbo。
ES6提供了一个可随时访问的全局symbol注册表。当使用symbol.for()方法注册一个symbol的时候,系统会首先在全局表里查找对应的参数的symbol是否存在,如果存在 ,直接返回已有的symbol,如果不存在,则在全局表里面创建一个新的symbol。
例:
let obj = {}; let name = symbol.for('test'); obj[name] = 'xiaoqian'; let name 2 = symbol.for('test'); console.log(obj[name2]);// xiaoqian
注意:即使使用symbol.for()方法创建symbol时没有传递任何参数,也会将undefined作为全局表里面的键来进行注册。
例:
let obj = {}; let name = symbol.for(); obj[name] = 'xiaoqian'; let name 2 = symbol.for(undefined); console.log(obj[name2]);// xiaoqian
后续有时间再补充创建symbol及symbol.keyfor()方法等~~