一.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…无法遍历