js的第7种数据类型——Symbol

版权声明:转载请注明出处 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43586120/article/details/88232645