美文网首页
ECMAScript6-Symbol

ECMAScript6-Symbol

作者: BrandWake | 来源:发表于2016-11-29 10:44 被阅读0次

    简述

    ES5的对象属性名都是字符串,为了 不引起属性名的混用和保证属性名的独一无二,进而引入了Symbol。
    Symbol是javascript的第7种数据类型,表示独一无二的值

    var s = Symbol();
    console.log(typeof s);//'symbol'
    

    Symbol函数不能使用new命令,否则会报错.因为Symbol是一种原始类型值,不是对象.

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

    var s = Symbol('lalal');
    console.log(s); // Symbol(lalal)
    

    注:Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不等的.

    // 没有参数的情况
    var s1 = Symbol();
    var s2 = Symbol();
    
    s1 === s2 // false
    
    // 有参数的情况
    var s1 = Symbol("foo");
    var s2 = Symbol("foo");
    
    s1 === s2 // false
    

    Symbol不能与其他类型的值进行运算,会报错

    var sym = Symbol('My symbol');
    
    String(sym) // 'Symbol(My symbol)'
    sym.toString() // 'Symbol(My symbol)'
    
    var sym = Symbol();
    Boolean(sym) // true
    !sym  // false
    
    

    作为属性名的Symbol

    let width = Symbol(),
        height = Symbol();
    let o = {};
    o[width] = '200px';
    console.log(o); // Object {Symbol(): "200px"}
    console.log(o.width); // undefined
    console.log(o[width]); //200px
    
    //注1:Symbol不能运用点运算符
    o.width = '1280px';
    console.log(o); //Object {width: "1280px", Symbol(): "200px", Symbol(): "300px", Symbol(top): 0}
    
    //注2:另一种赋值的方法,使用Object.defineProperty()的方法
    Object.defineProperty(o, height, {
        value: '300px'
    }); // Object {width: "1280px", Symbol(): "300px"}
    console.log(o);
    
    //注3:另一种定义Symbol值的方式
    o[Symbol('top')] = 0;
    console.log(o); //Object {width: "1280px", Symbol(): "300px", Symbol(top): 0}
    console.log(o[top]); //undefined;
    console.log(o[Symbol('top')]); //undefined;??why,如何取值呢
    

    相关文章

      网友评论

          本文标题:ECMAScript6-Symbol

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