Symbol
:新的原始数据类型,不能添加属性
let sym=Symbol();
//判断sym的数据类型
console.log(typeof Symbol);
和String数据类型
相似,但是每次声明的都是唯一
的,不是对象,不能用new进行声明
let sym1=Symbol();
let sym2=Symbol();
//每个用Symbol创建的实例,都是唯一的
console.log(sym1 === sym2 );//false
参数:对当前的Symbol实例的描述
let sym=Symbol('foo');
//将Symbol实例转成字符串
sym.toString();
//将Symbol转成布尔值
Boolean(sym)//true
//转成数值
Number(sym)//Cannot convert a Symbol value to a number
创建相同的Symbol
实例:
Symbol.for():
创建的Symbol实例,放到了全局环境
中,可以搜索到,每次创建都要在全局环境中看是否有该Symbol实例。会在全局环境
中登记key值
let sym1=Symbol.for('foo');
let sym2=Symbol.for('foo');
console.log(sym1 === sym2)
Symbol.keyFor()
返回已经登记
的Symbol类型的key值
let sym1=Symbol.for('cc');
Symbol.keyFor(sym1);
Symbol的内置属性:
Symbol.iterator指向该对象的默认遍历器方法