• Symbol在实际中,可以作为对象的私有属性。如下,
    1. const privateVal = Symbol('Private');
    2. const obj = {
    3. [privateVal]: 'private',
    4. other: {}
    5. }
    6. console.log(obj) // {other: {…}, Symbol(Private): "private"}

    上述代码中,如果外部无法取得privateVal变量时,也就无法访问到obj里的Symbol变量,因此适合用来作为不想被外部访问到的私有变量。

    • 防止属性名冲突。
    1. let obj = {
    2. name: '1',
    3. name: '2', // 会覆盖前一个同名属性
    4. }
    5. console.log(obj); // {name: "2"}

    在 js 中,对象属性名冲突,则后一个属性会覆盖前一个同名属性。这在引入一些第三方库的时候,会导致潜在的冲突风险。因此,可以使用Symbol防止属性名冲突。如下:

    1. const NAME1 = Symbol('name');
    2. const NAME2 = Symbol('name');
    3. consoel.log(NAME1 == NAME2); // false;
    4. const obj = {
    5. [NAME1]: '1',
    6. [NAME2]: '2'
    7. }
    8. console.log(obj); // {Symbol(name): "1", Symbol(name): "2"}