ES6 中使用 Symbol 实现进行多种类型的操作

Symbol 是 ES6 中全新的数据类型,它的作用是创建一个唯一的标识符。一个 Symbol 类型的值可以被用作对象属性名,它保证了属性名的唯一性。Symbol 的引入极大的增强了 JavaScript 的功能,让开发者能够更好地进行多种类型的操作。

创建 Symbol

我们可以使用 Symbol 函数来创建一个 Symbol 类型的数据。Symbol 函数接收一个可选的字符串参数,它会被用作 Symbol 实例的描述。

--- ------ - ---------

-------------------- -- --------

同时,我们可以指定一个字符串参数来描述创建的 Symbol 类型的值。

--- ------ - -------------- --------------

-------------------- -- ------------- ------------

Symbol 作为对象属性名

在 JavaScript 中,对象属性名可以是字符串或符号(Symbol)。使用 Symbol 作为属性名可以更好的保证属性名的唯一性。因此,我们可以通过 Symbol 创建对象属性,如下所示:

----- -------- - ---------
----- -------- - ---

------------------ - ------ ---------

-------------------------------- -- ------ --------

同时,我们可以在对象字面量中直接使用符号作为属性名:

----- -------- - ---------

----- -------- - -
    ----------- --- ------ ---------
-

-------------------------------- -- --- ------ ---------

内建 Symbol 值

JavaScript 中有一些内建的符号值,使用 Symbol 函数和这些值可以进行多种类型的操作:

Symbol.iterator

Symbol.iterator 用于定义对象的一个默认迭代器,用于迭代对象的每个属性。我们可以使用 for...of 循环语句将对象的属性依次读取出来。

----- -------- - ---------

----- -------- - -
  ----- - ---- ---- --- --
  ----------- ---------- -
    --- ----- - ---
    --- ---- - ----------
    ------ -
      ----- ---------- -
        --------
        ------ -
          ------ ------------
          ----- ----- -- -----------
        --
      -
    --
  -
--

------- ----- -- --------------------- -
    -------------------
-

Symbol.toStringTag

Symbol.toStringTag 用于给我们自定义类的 toString 方法返回的字符串增加一个标记,方便我们进行辨识。

----- -------- -
    ---------------------- -
        ------ -----------
    -
-

---------------------------------------------- ----------- -- -------- ----------

Symbol.toPrimitive

Symbol.toPrimitive 用于定义对象的默认类型转换方法。这个方法接受一个字符串参数 hint,一共有三种情况:

  • hint 为 "number" 时,表示要将对象转成数字类型;
  • hint 为 "string" 时,表示要将对象转成字符串类型;
  • hint 为 "default" 或者它没有指定时,表示要将对象转成默认类型。
--- -------- - -
    -------------------------- -
        ------ ------ -
            ---- ---------
                ------ ----
            ---- ---------
                ------ --- --------
            --------
                ------ ----------
        -
    -
-

----------------------           -- ---------
-----------------------          -- ---
---------------------------      -- --- -------

结论

Symbol 是 ES6 中的一个非常重要的对象类型,它在多种场景下都有很好的应用。我们可以利用 Symbol 去创建唯一的标识符,也可以使用内建 Symbol 值进行多种类型的操作。在我们的开发过程中,合理的运用 Symbol 可以让我们的代码更加可读、可维护、可扩展。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671b79cb9babaf620fabfcec