版权声明:转载请注明出处 https://blog.csdn.net/weixin_43586120/article/details/88232645
1、创建方式(不能用new创建):
① var sy=Symbol(); //唯一且永远都不相等,自己跟自己相等,这点与对象同
② Symbol(“name”)
console.log(Symbol); //ƒ Symbol() { [native code] }
var sy = Symbol();
console.log(typeof sy); //symbol
console.log(Symbol(“description”)); //Symbol(description)
console.log(Symbol()==Symbol()); //false
console.log(Symbol("description")==Symbol("description")); //false
2、Symbol的两个作用:
① 合并的时候可以放置变量,冲突无覆盖;
② 作为对象的内部变量,去进行计算或使用;
var obj1 = {
name:"苹果",
description:"red"
}
var obj2 = {
name:"苹果",
description:"甜"
}
var reg = Object.assign(obj1,obj2);
console.log(reg); //{name: "苹果", description: "甜"}
对象的两个合并,键值相同的后面的值覆盖前面的值。这时Symbol的作用就体现出来了:
//例子1:
var obj1={
name:"apple"
}
obj1[Symbol("description")]="big";
var obj2={
name:"apple"
}
obj2[Symbol("description")]="red"
console.log(Object.assign(obj1,obj2)); //{name: "苹果", Symbol(description): "red", Symbol(description): "甜"}
for(let attr in reg){
console.log(attr); //只能取出name属性,跟symbol相关的可存不可取
}
//例子2:
var mapList = { //想让symbol可存可取就把symbol定义成字典量
S:Symbol("S"),
M:Symbol("M"),
L:Symbol("L"),
XL:Symbol("XL")
}
var size = mapList.M;
switch(size){
case mapList.S:
console.log("这是一个s码的衣服")
break;
case mapList.M:
console.log("这是一个m码的衣服")
break;
case mapList.L:
console.log("这是一个l码的衣服")
break;
case mapList.XL:
console.log("这是一个xl码的衣服")
break;
}