ES6

ES6学习笔记6:新数据类型!Symbol登场!

Posted by mieruko on 2016-12-10

前言

ES标准以前有啥数据类型???
回顾一下:

1
2
3
4
5
6
undefined
null
Boolean
String
Number
Object

一共六种 没了!
ES6新增了一种了叫做Symbol的数据类型

Symbol的特征

Symbol的意思,就是标记。
它这样用:

1
let a = Symbol();

特征是每创建一个新的Symbol,它代表的值都不一样
括号里面可以传入参数,是你描述的东西的内容。
不过就算你不传值,你用相同的方式创建的两个Symbol都是不一样的。

看下面:

1
2
3
let a = Symbol();
let b = Symbol();
console.log(a===b);

输出false,说明它俩不是一回事。

Symbol能干啥

Symbol可以生成唯一的标识
已知最大的用处是做对象的属性名称,防止这个属性名称被重写
怎么理解?

平时我们如果有一个属性:

1
person.name = 'wang';

此时如果有个人来一行:

1
person.name = 'li';

如果你的name是不希望被改变的,那么此时此刻你会很难过。

这样做:

1
2
3
4
let person = {};
let name = Symbol();
person[name] = 'wang';
person[name] = 'li';

这时,它仍然输出了li,还是被改变了。
那你说个p啊!!完全没用啊摔!!!

因此楼上这种情况,是不起作用的,我们说属性名称不能被重写,是这种情况:

1
2
3
4
5
6
7
8
9
10
let name = Symbol();
{
var person = {};
person[name] = 'File1';
}

{
person.name = 'File2';
}
console.log(person);

输出的对象里面有两个键,一个是Symbol类型,一个是name。
此时你除了用person[name]这种形式外,都无法访问和修改这个Symbol类型对应的值。

其实硬要改也是可以的,只是限制了你,必须调用你最初Symbol()出来的那个Symbol类型数据,别的没用。
准确的说,是避免了你“无意中”覆盖已有变量。

结语

这个新类型,功能比较单一。
不过也是很实用的,点赞。
楼上只是介绍了一个主要的原因,以后一定还会有更多的发现的^_^。