Symbol(ES6)

2017-09-20  本文已影响0人  李莫愁_melissa

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了,害怕玩也玩不好。

上一篇下一篇

猜你喜欢

热点阅读