一.Symbol类型
JS中七大基本数据类型之一
1.表示独一无二的值,它是js中的第七种数据类型,属于基本类型
基本类型:number/string/boolean/null/undefined/Symbol
引用类型:object
2.使用方式类似于函数
// let s1 = Symbol(‘name’);
// let s2 = Symbol();
// console.log(s1 == s2); //false
// console.log(s1);
// console.log(s2);
// console.log(s1 === s1); //true 因为这就是同一个变量
// console.log(s1 === Symbol(‘name’)); //false 因为匿名函数都是独一无二的,s1所表示的Symbol函数与等式右边的函数看起来一样,但他们实际也是不一样的两个函数,这也是Symbol作为标识符独一无二的原因
// console.log(Symbol(‘name’) === Symbol(‘name’)); //false 原因同上
3.Symbol函数接收一个字符串作为参数,表示对symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分.
// 描述的内容相同仅仅表示的是描述,不代表其他的意义。
// let s1 = Symbol(‘name’);
// let s2 = Symbol(‘age’);
// let s3 = Symbol(‘sex’);
4.目的:对象的属性名相同,很容易出现覆盖,如果是Symbol当作对象的属性名,不会被覆盖。
// const obj = {
// [s1]: ‘zhangsan’,
// [s2]: 18,
// [s3]: ‘男’
// };
// console.log(obj[s1]); //zhangsan
// console.log(obj[s2]); //18
// console.log(obj[s3]); //男
5.不可以直接用Symbol函数作为key键,因为两个Symbol函数不可能相等,这样会导致无法查询该属性,如果用变量获取Symbol的地址的话,就可以比较两个地址是否相等获取这个Symbol标识符了
// const obj = {
// [Symbol(‘name’)]: ‘wangwu’,
// [Symbol(‘age’)]: 19,
// [Symbol(‘sex’)]: ‘男’
// };
// console.log(obj[Symbol(‘name’)]); //undefined
// for…in…无法遍历