symbol 介绍

158 阅读1分钟
js基本数据类型分为七种 null undefined boolean object string number Symbol,symbod是es6新推出的数据类型。

注意:

  • symbol 声明的变量是独一无二的。
  • Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

Symbol的用法

  • 变量声明:
    let a1 = Symbol(1);//Symbol(1)
    let a2 = Symbol(1);//Symbol(1)
    a1 === a2 //false
    // 原因:因使用Symbol定义的变量是独一无二的
  • 使用Symbol.for()生命
    let a1 = symbol.for('s');
    let a2 = symbol.for('s');
    a1 === a2 //true
    //原因:a2在全局中搜索有没有以's'参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个以's'字符串为名称的Symbol值。

假设现在有一对象中key值为s 而现在需求重新定义key值为s的键值对而又不能动原始值可使用Symbol

let obj = {
	s: 's',
	[a1]: 's',
	[a2]: 's',
	a: '1'
};
//{a: "1", s: "s", Symbol(s): "s"}
for(let [key,value] of Object.entries(obj)){
	//可以拿到key和vaule 注意使用Symbol定义的key可以拿到直接定义的值不能拿到
	
}
  1. 将对象转换为数组 格式[[key,value]]
    //将对象转换为数组 格式[[key,value]]
    Object.entries(obj)//[['a','1'],['s','s']]
    //返回值:Array 
  2. 获取当前对象中所有的Symbol值 key名称
    Object.getOwnPropertySymbols(obj) //返回[key] 只返回所有Symbol的key值
    //返回值:Array 
  3. 获取当前对象中所有的key和value值
    Reflect.ownKeys(obj)//返回[key] 返回当前对象的所有key值
    //返回值:Array