Symbol
在实际中,可以作为对象的私有属性。如下,
const privateVal = Symbol('Private');
const obj = {
[privateVal]: 'private',
other: {}
}
console.log(obj) // {other: {…}, Symbol(Private): "private"}
上述代码中,如果外部无法取得privateVal
变量时,也就无法访问到obj
里的Symbol
变量,因此适合用来作为不想被外部访问到的私有变量。
- 防止属性名冲突。
let obj = {
name: '1',
name: '2', // 会覆盖前一个同名属性
}
console.log(obj); // {name: "2"}
在 js 中,对象属性名冲突,则后一个属性会覆盖前一个同名属性。这在引入一些第三方库的时候,会导致潜在的冲突风险。因此,可以使用Symbol
防止属性名冲突。如下:
const NAME1 = Symbol('name');
const NAME2 = Symbol('name');
consoel.log(NAME1 == NAME2); // false;
const obj = {
[NAME1]: '1',
[NAME2]: '2'
}
console.log(obj); // {Symbol(name): "1", Symbol(name): "2"}