美文网首页
Symbol(ES6)

Symbol(ES6)

作者: 李莫愁_melissa | 来源:发表于2017-09-20 17:55 被阅读0次

    Symbol类型:Symbol是ES6新出的基本类型

    1,每一个Symbol的值都是唯一的,不与其他的相等。

    let symbol1 = Symbol();

    let symbol2 = Symbol();

    console.log( symbol1 === symbol2 );  //false

    但如果你直接将s1赋值给s2,就是所谓的浅拷贝,会相等。

    2,Symbol充当唯一对象的属性(key)

    letmyObject = {

        publicProperty:'Value of myObject[ "publicProperty" ]'

    };

    myObject[ symbol1 ] ='Value of myObject[ symbol1 ]';

    myObject[ symbol2 ] ='value of myObject[ symbol1 ]';

    console.log(myObject);

    //publicProperty:"Value of myObject[ "publicProperty" ]"

    //Symbol():"Value of myObject[ symbol1 ]"

    //Symbol():"value of myObject[ symbol1 ]"

    也就是说以不同Symbol为key,证明Symbol的唯一性。

    1)Symbol属性键的值不会再JSON中显示,也不会再for...in 和Object.keys中被枚举出来。

    console.log(JSON.stringify(myObject));

    //"{"publicProperty":"Value of myObject[ \"publicProperty\" ]"}"

    console.log( for(var key in myObject) {

        console.log(key, myObject[key])

    })  // publicProperty Value of myObject[ "publicProperty" ]

    console.log( Object.keys(myObject) );

    ///["publicProperty"]

    虽然Symbol 键的属性没有在上述案例中出现,这些属性在严格意义上也不是完全私有的。

    2)Object.getOwnPropertySymbols提供了一种检索对象的 Symbol键的方法。

    concosle.log( myObject[Object.getOwnPropertySymbols(myObject)[0]] )

    ///"Value of myObject[ symbol1 ]"

    3.Symbol被包含在浅拷贝里

    var cloneObject = Object.assign( {}, myObject );

    console.log( cloneObject )

    /// publicProperty:"Value of myObject[ "publicProperty" ]"

    /// Symbol():"Value of myObject[ symbol1 ]"

    /// Symbol():"value of myObject[ symbol1 ]"

    4,正确命名 Symbol

    如果你需要额外的语句注释,可以在Symbol上附上一个注释

    let leftNode = Symbol('binary left')

    console.log(leftNode);

    ///Symbol(binary left)

    (如果两个Symbol有相同的描述,这两个symbol仍不相同)

    5.全局Symbol注册表

    Symbol注册表,为字符串和Symbol提供了一对一的关系,使用Symbol.for(key) 返回Symbol

    let private1 = Symbol.for('fristName');

    let private2 = Symbol.for('fristName')

    myObject[private1] = '222';

    myObject[private2] = '333';

    console.log(myObject[private1])

    /// 333

    由于注册表Symbol的值与字符串有一一对应的关系,可以通过keyFor检索字符串键

    console.log( Symbol.keyFor(private1) );

    /// "fristName"

    ..好了好了,还有很多用法:我就是看着这个网址一个一个打下来的

    https://my.oschina.net/u/2903254/blog/818796


    更新一下:没写明天学什么。。

    明天学一下异步加载数据吧。。。。做一个图片懒加载。。。我的服务器咋配不好啊。。。

    明天下午要去biu了,害怕玩也玩不好。

    相关文章

      网友评论

          本文标题:Symbol(ES6)

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