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"}
