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()方法等~~

 

转载于:https://www.cnblogs.com/smuwgeg/p/9696862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值