Symbol()、Symbol.for()与Symbol.keyFor()

Symbol()

使用 Symbol() 标识的变量,虽然内容一样,、但该变量是独一无二的,就比如下面的

   let s2=Symbol('你好');
   let s3=Symbol('你好');

   console.log(s2===s3);//false

可以把 Symbol() 看成一个标识,一个班级中有两个人的名字一样,但是学号不一样,这个学号可以理解为是 Symbol() 声明变量时给的

Symbol.for()

 let s1=Symbol.for('foo');
 let s2=Symbol.for('foo');

 console.log(s1===s2);//true
 //s1和s2都是Symbol值,但是它们都是同样参数的Symbol.for()方法生成的,所以实际上是同一个值

使用 Symbol.for() 声明的变量可以重复使用

Symbol.for() 接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个该字符串为名称的Symbol值

Symbol() 与 Symbol.for() 的区别

Symbol.for()Symbol()这两种写法,都会生成新的Symbol,它们的区别是,前者会被登记在全局环境中供搜索,后者不会;Symbol.for()不会每次调用就返回一个新的Symbol类型的值,而是先检查给定的参数字符串是否已存在,如果不存在才会新建一个并返回一个该字符串为名称的Symbol值

比如:调用Symbol.for('cat') 30次,每次都会返回同一个Symbol值,但是调用Symbol('cat') 30次,会返回30个不同的Symbol值

Symbol.keyFor()

 let s1=Symbol.for('foo');
 let s2=Symbol.keyFor(s1);
 console.log(s2);//foo

 let s3=Symbol('foo');
 let s4=Symbol.keyFor(s3);
 console.log(s4);//undefined

 Symbol.keyFor() 方法返回一个已登记的Symbol类型的值

变量s1属于登记在全局环境下的Symbol值,所以使用Symbol.keyFor()方法输出foo

变量s1属于未登记在全局环境下的Symbol值,所以使用Symbol.keyFor()方法输出undefined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值