Symbol是es6新引入的原始数据类型,最大的特点就是其可以表示独一无二的值
一、创建Symbol
创建symbol有两种方式
1、通过Symbol()来创建一个Symbol值
(1)symbol最大的特点就是其表示的值是独一无二的
由此可见,虽然s1s2在控制台输出结果一样,但其实是两个不一样的Symbol值
(2) 为了可以更好区分symbol,我们可以在创建的时候带上参数,来唯一标识该symbol,当然不论参数是否一样,其表示的值都是不一样的
(3)注意创建的时候不能使用new,否则会报错,提示我们Symbol不是一个构造函数
因为Symbol()是基础数据类型,返回的是一个值并不是对象
应用
可以用来定义对象的唯一属性名,加入一个已存在的属性
2、通过Symbol.for()创建一个symbol()值
(1)与symbol()不同的是,使用symbol.for()时候,会首先在全局搜索是否存在以该参数为名称的symbol值,如果有则返回该symbol,没有则新建一个
由此可见,使用symbol.for()创建时,如果参数一样,不论调用几次,其得到的值都是同一个
(2)这里注意,由于symbol没有登记机制,所以通过symbol()创建的值,通过symbol.for()是找不到的
因为symbol.for()找不到key为symbol的值,所以会在全局创建一个,并且登记在symbol表中
二、查找
symbol.keyFor()
返回Symbol值的key
与symbol.for()一样,symbol.keyFor()是在登记表中查找该Symbol值是否存在,存在则返回该值的key,不存在则返回undefined