1.知识点
-
ES6增加了Symbol新的原始类型
-
symbol的用法
-
作为常量
-
作为属性
-
半隐藏属性
2.实战
2.1 symbol新类型
定义两个字符串,对比字符串的值,毫无疑问,字符串的值肯定是相等的
let str1 = String("HeloWorld");
let str2 = String("HeloWorld");
console.log(str1 == str2); //结果 true
console.log(str1 === str2); //结果 true
2.2 说明
1.定义两个symbol类型
2.查看当前的类型 typeof 是symbol类型,toString 的值类型也是symbol
3.对比s1 s2,值肯定不一样,为什么呢?
symbol内部分配了一个唯一的id,哈希值,id不相等,所以值肯定是不相等的,比较的事内部id!
let s1 = Symbol("mySymbol");
let s2 = Symbol("mySymbol");
console.log(typeof s1); //结果:symbol
console.log(s1.toString()); //结果:Symbol(mySymbol)
console.log(s1 == s2); //结果:false
console.log(s1 === s2); //结果:false
2.3 使用
1、做为常量例子
->我们定义两个symbol类型的常量
->赋值一个初始值
->对比当前的初始值是否等于常量,输出正确的结果
不用关心symbol里面的值,只要关注他赋予的常量值就可以。
const Java = Symbol();
const Ruby = Symbol();
var lang = Java;
if (lang === Java) {
console.log('Java真好');
}
if (lang === Ruby) {
console.log('再学个Ruby on Rails吧。');
}
输出:
2、作为属性
->symbol这两个标记作为不同的属性名而区分开
->分别定义两个不同的属性
let s1 = Symbol("mySymbol");
let s2 = Symbol("mySymbol");
var obj = {};
obj[s1] = "helo";
obj[s2] = "world";
console.log(obj);
console.log(obj[s1]);
console.log(obj[s2]);