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可以拿到直接定义的值不能拿到
}
- 将对象转换为数组 格式[[key,value]]
//将对象转换为数组 格式[[key,value]] Object.entries(obj)//[['a','1'],['s','s']] //返回值:Array
- 获取当前对象中所有的Symbol值 key名称
Object.getOwnPropertySymbols(obj) //返回[key] 只返回所有Symbol的key值 //返回值:Array
- 获取当前对象中所有的key和value值
Reflect.ownKeys(obj)//返回[key] 返回当前对象的所有key值 //返回值:Array