Symbol主要解决的问题就是防止属性名称冲突的问题
Symbol是一种数据类型,是JavaScript语言的第7种数据类型,前6种分别是:undefined,null,布尔值,字符串,数值和对象。
Symbol类型的值是通过Symbol函数生成的。它的值是独一无二的,也就是唯一的,可以保证对象中属性名称的唯一。
Symbol( )函数可以接受一个字符串作为参数,这个参数表示对Symbol的描述,主要是为了在控制台进行输出打印的时候,能够区分开,Symbol最终是属于哪个变量的。
Symbol的应用场景:
(1)作为对象的属性名
let mySymbol = Symbol();
let obj = {}
// 第一种添加属性的方式
obj[mySymbol] = 'hello';
console.log(obj[mySymbol]);
let mySymbol = Symbol();
let obj = {
[mySymbol]: 'world' // 注意mySymbol必须加上方括号,否则为字符串而不是Symbol类型。
}
console.log(obj[mySymbol]);
let mySymbol = Symbol();
let obj = {};
Object.defineProperty(obj, mySymbol, {
value: '你好'
})
console.log(obj[mySymbol]);
(2)防止属性名称冲突
let obj = {
name: 'zs',
age: 18
}
let mySymbol = Symbol('lib1');
function test1(obj) {
obj[mySymbol] = 42;
}
let mySymbol2 = Symbol('lib2');
function test2(obj) {
obj[mySymbol2] = 369;
}
test1(obj);
test2(obj);
console.log(obj);