应用场景:
es5的对象属性名都是字符串,容易造成属性名冲突
es6引入新的原始数据类型symbol,表示独一无二的值
对象属性名可以有两种类型:1.字符串;2.symbol类型(独一无二,不会与其他属性名产生冲突)
{
let str1 = Symbol();
let str2 = Symbol();
console.log(str1 === str2);//false
console.log(typeof str1);//symbol
}
描述
{
let str1 = Symbol('name');
let str2 = Symbol('name');
console.log(str1, str2);//Symbol(name) Symbol(name)
console.log(str1 === str2);//false
}
对象属性名的问题:只会显示lucy的名字
{
const obj = {};
obj.name = 'bob';
obj.name = 'lucy';
console.log(obj);//{name: "lucy"}
}
对象属性名的解决方法(symbol的常用实例)
{
const obj = {};
obj[Symbol('name')] = 'lucy';
obj[Symbol('name')] = 'bob';
console.log(obj);//{Symbol(name): "lucy", Symbol(name): "bob"}
}