ES7 中的 Symbol 和 Symbol.iterator

阅读时长 4 分钟读完

介绍

在 JavaScript 中,每个属性和方法都有一个字符串类型的名称作为标识符。但是,有时候我们需要一种能够保证唯一性的标识符。为了解决这个问题,ES6 引入了一种新的原始数据类型 Symbol。在 ES7 中,Symbol 的功能更加强大,并加入了新的内置类型 Symbol.iterator。

Symbol

Symbol 是 ES6 新引入的一种原始数据类型。它的定义是一个唯一的、不可修改的值。Symbol 的使用方式有点类似于字符串,但是它的值是一个不可变的基本类型值。

创建 Symbol

在使用 Symbol 时,需要使用 Symbol 函数。Symbol 函数可以接收一个参数,这个参数是 Symbol 的描述信息。但是,这个描述信息只是为了方便调试使用,并没有其他作用。

使用 Symbol

Symbol 可以作为对象属性名,和字符串类型的属性名不同,使用 Symbol 做属性名不会和其他属性名冲突。

Symbol 的内置类型

ES6 内置了一些 Symbol 类型。

  • Symbol.iterator:用于定义对象的默认迭代器方法。
  • Symbol.hasInstance:用于定义对象的 instanceof 运算符。
  • Symbol.toPrimitive:用于定义对象转换为基本数据类型的规则。
  • Symbol.toStringTag:用于定义对象的 toString 方法返回的字符串。
  • Symbol.isConcatSpreadable:用于定义数组在使用 concat 方法时如何展开。

Symbol.iterator

Symbol.iterator 是 ES7 中内置的新类型 Symbol。它用于定义对象的默认迭代器,主要用于支持 for...of 循环。

创建迭代器

要创建一个迭代器,需要定义一个方法,用 Symbol.iterator 作为键名返回该方法即可。

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

可迭代对象

实现了 Symbol.iterator 方法的对象都可以称为可迭代对象。

创建自定义迭代器

我们也可以自己创建一个自定义的迭代器。只需要定义一个生成器函数,返回一个包含 next 方法的对象。next 方法返回一个带有 value 和 done 两个属性的对象,用来表示迭代器返回的值和是否迭代完成。

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

总结

Symbol 和 Symbol.iterator 是 JavaScript 中非常重要的元素,在前端开发中的应用非常广泛。了解它们的特性和用法,可以更好地理解和应用现代前端开发中的技术。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648016d448841e9894f961cc

纠错
反馈