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