es6引入了一种新的原始的数据类型Symbol,表示独一无二的值。它是javascript的第7种数据类型,类似于字符串的数据类型
Symbol特点
1.Symbol的值是唯一的,用来解决命名冲突的问题
2.Symbol的值不能与其他数据进行运算和比较
3.Symbol定义的对象, for...in 、 for...of 的循环中,也不会被 Object.keys() 、 Object.getOwnPropertyNames() 返回但是可以使用Reflect.ownKeys或者Object.getOwnPropertySymbols()来获取对象的键名,前者是获取全部键名(包括Symbol类型)后者指返回是Symbol类型的键名
//创建Symbol
let s=Symbol();
//console.log(s,typeof s) Symbol() 'symbol'
let s2=Symbol('name'); //注释一个词来表示该数据是来干嘛的 此Symbol是表示该变量是name
let s3=Symbol('name');
// console.log(s2==s3) false
let s=Symbol('name');
console.log(s.description); //Symbol的描述
//Symbol.for创建
Symbol.for() 类似单例模式,首先会在全局搜索被登记的 Symbol 中是否有该字符串参数作为名称的 Symbol 值,如果有即返回该 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值,并登记在全局环境中供搜索。
let s4=Symbol.for('name');
let s5=Symbol.for('name');
//console.log(s4===s5) true
Symbol.keyFor()
Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。
//不能与其他数据进行运算
// let result=s+100;
// let result=s+'100';
// let result=s>100;
// let result=s+s;
// let result=s4+s5;