ES6基础教程(第八节)——Symbol类型
es6对几大基础类型的扩展已经讲完了,调皮的es6还新增了一种类型,我们知道js有六大基础类型,分别是:
String 字符串类型
Number 数字类型
Object 对象类型
Boolean 布尔值类型
null 空值
undefined 未定义
现在又新增了一个小兄弟,叫Symbol,翻译一下就是标志、标记的意思,
这么一个数据类型是做什么的呢,标记个啥子呢?这个得从问题的源头出发,
在团队开发时候,很容易出现命名冲突问题,而且这个问题很难被发现,
出现bug的几率大大增加,发现的难度也是大大增加。所有就有了这么个类型,就是为了解决命名冲突问题,
//定义一个symbol类型的变量
let sym = Symbol();
console.log(sym);
//打印结果:Symbol()
console.log(typeof sym);
//打印结果:symbol
这样就定义了一个Symbol类型的变量,
现在我们定义两个Symbol类型的变量,尝试着判断他们是否相等:
let sm1 = Symbol();
let sm2 = Symbol();
sm1 === sm2 //结果:false
可以看出,就算是一致的,也是不相等的。
现在我们给Symbol添加参数:
let sym1 = Symbol('sym');
let sym2 = Symbol('sym');
sym1 === sym2
//结果:false
即使参数一样,描述一样,得到的值也是不相等的,所以Symbol类型永远都是唯一的。
let name = Symbol();
let person = {
[name]:"张三"
};
console.log(person[name]);
//结果:张三
console.log(person.name);
//结果:undefined
这是什么情况,为啥找不到name值呢?是不是瞬间一万只羊驼在奔腾,
其实原因是当symbol值作为对象的属性名的时候,不能用点运算符获取对应的值。