ES5中规定JavaScript有6种数据类型:Undefined、Null、String、Boolean、Number、Object;ES6新增加一种数据类型Symbol.
1.symbol定义
- 原始数据类型:不是对象,不能使用new命令创建,不能添加属性;
- 表示独一无二的值:
Symbol()===Symbol();//false
Symbol(‘foo‘)===Symbol(‘foo‘);//false
Symbol.for(‘bar‘)===Symbol(‘bar‘);//true
- symbol值作为属性名时,该属性是公开属性,非私有;
- symbol作为属性时,不可被遍历;
2. 作用
- 消除魔术字符串:消除代码内部强耦合;
模块的单利模式:任何时候都返回同一个实例;
var CAT_KEY=Symbol.for(‘cat‘); function Cat(){}; if(!global[CAT_KEY]){global[CAT_KEY]=new Cat()};
3.内置Symbol值——11个
Symbol.hasInstance:Symbol.isConcatSpreadable:
-Symbol.species:Symbol.match:Symbol.replace:Symbol.search:Symbol.split:Symbol.iterator:Symbol.toPrimitive:Symbol.toStringTag:Symbol.unscopable: