Symbol()创建的值不相等而Symbol.for()创建的值相等,为什么?
先上例子:
1、用Symbol() 创建
<script>
// let s = Symbol();
// console.log(s,typeof s);
let s2 = Symbol('我是小米');
let s3 = Symbol('我是小米');
console.log(s2==s3);
</script>
控制台输出结果:
2、用Symbol.for() 创建
<script>
let s4 = Symbol.for("我是红豆");
let s5 = Symbol.for("我是红豆");
console.log(s4==s5);
</script>
控制台输出结果:
疑问:为什么会出现这种情况???
解答:
使用Symbol.for() 方法创建时,会将创建的Symbol存入一个全局的注册表中,在下次创建时,会首先从注册表中查找是否已有相同的值存在,如果没有,则创建;如果有,便不会创建重复的Symbol。
这也就是解答了 为什么使用Symbol.for() 创建的两个Symbol判断是否相等时,返回的时true。