第7种数据类型Symbol

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;


你可能感兴趣的:(第7种数据类型Symbol)