美文网首页
ES6入门之Symbol数据类型

ES6入门之Symbol数据类型

作者: yu580 | 来源:发表于2017-07-17 11:00 被阅读0次

    基本概念

    Symbol,表示独一无二的值。它是 JS 中的第七种数据类型。

    基本的数据类型: Null Undefined Number Boolean String Symbol
    引用数据类型:Object


    1.Symbol数据的声明:

    let s1 = Symbol();
    let s2 = Symbol();
    console.log(typeof s1); // 'symbol'
    console.log(s1 === s2); //false
    

    Symbol 函数前不能使用 new 否则会报错,原因在于 Symbol 是一个原始类型的值,不是对象。

    let s3 = Symbol('yy');
    let s4 = Symbol('ll');
    console.log(s3, s4); //Symbol(yy) Symbol(ll)
    console.log(Symbol('momo') === Symbol('momo'));//false
    

    Symbol 函数接收一个字符串作为参数,表示对Symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分

    2.Symbol 数据类型的转换

    console.log(String(Symbol('yy'))); // Symbol(yy)
    console.log(Symbol('ll').toString()); // Symbol(ll)
    
    console.log(!!Symbol()); // true
    console.log(Number(Symbol())); //报错
    
    console.log(Symbol('momo') + 'fff'); // 报错
    console.log(Symbol('momo') * 100);  //报错
    

    Symbol数据类型不能做任何运算。转为布尔值的时候是true,可以转化为String类型。不能转换为Number。

    3.作为对象的属性名

    写法一:

    let yyy = Symbol('yyy');
    const obj = {};
    obj[yyy] = 'hello';
    console.log(obj); // {Symbol(yyy): "hello"}
    console.log(obj[yyy]); //hello
    

    写法二:

    let ss = Symbol('ss');
    const data = {
      [ss]: 'world'
    };
    console.log(data);// {Symbol(ss): "world"}
    console.log(data[ss]);//world
    

    上面两种方法都可以通过key来获取到值。

    const data = {
      [Symbol()]: 123,
      a: 1,
      b: 2
    };
    console.log(data); //{a: 1, b: 2, Symbol(): 123}
    console.log(data['Symbol()']); //undefind 无法获取
    

    这样声明后我们怎么来获取到值呢?
    我们可以通过Object.getOwnPropertySymbols方法获得一个对象的所有的Symbol属性。

    console.log(Object.getOwnPropertySymbols(data)); // [Symbol()]
    该方法返回的是一个数组,我们用数组的取值方法就可以拿到值

    console.log(data[Object.getOwnPropertySymbols(data)[0]]); //123

    值得注意的是:Symbol数据作为key时是不能被for。。in循环的。

    for(let i in data){
      console.log(i);
    }
    // a
    //b
    

    以上都是个人理解如有不对之处还望指正交流!

    相关文章

      网友评论

          本文标题:ES6入门之Symbol数据类型

          本文链接:https://www.haomeiwen.com/subject/ncdfkxtx.html