完整解读 ECMAScript 2019 之 Symbol 新特性!

随着 ECMAScript(以下简称 ES)版本的不断更新迭代,Symbol 作为 ES6 新增的一种数据类型,已经成为了 ES 中非常重要的一部分,本文将对 Symbol 详细进行解读。

什么是 Symbol?

Symbol 是 ES6 引入的一种新的基本数据类型,表示独一无二的值,可以作为对象属性的标识符使用。与字符串不同,Symbol 值是不可变的。如果您希望对象中的某个属性确实是唯一的,那么 Symbol 就是一个非常好的选择。

创建 Symbol 的方式非常简单,只需调用 Symbol 函数,而且没有参数,看下面这个例子:

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

Symbol 唯一性

创建 Symbol 时,如果什么都不传入,Symbol 的值就是唯一的,即使创建多个没有参数的 Symbol,它们的值也会不同。

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

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

可以看到在上面的代码中,虽然 s1 和 s2 都是没有参数的 Symbol,但是它们的值是不同的,这就是 Symbol 的唯一性。

Symbol 对象

Symbol 类型的值只是使用 Symbol() 创建的基本类型。在 ES6 中,也可以使用 Symbol 构造函数创建 Symbol 对象。Symbol 对象是 Symbol() 函数的实例,它们包含 Symbol 值的显式包装器,其中的属性和方法可以被使用来操作 Symbol 值。

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

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

在上面的例子中,用 new 关键字创建 Symbol 对象会抛出 TypeError 异常。

Symbol 作为属性键

由于 Symbol 的唯一性和不变性,它非常适合作为对象属性的标识符使用,在使用 Symbol 作为属性键后,该属性不会出现在对象的枚举中。

下面的例子演示了如何使用 Symbol 作为属性键的方法:

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

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

在上面的代码中,使用了 Symbol("key") 创建了一个 Symbol,然后它被用作对象 a 的属性名。在使用 Object.getOwnPropertySymbols 方法时,该属性将会被列出来。

而使用 Object.getOwnPropertyNames 方法时,并不会输出这个属性,因为它被认为是一种特殊的类型,不能被列举。

预定义 Symbol

ES6 中定义了一些内置的 Symbol 值和函数,它们具有特殊的含义和用途。

Symbol.iterator

这个 Symbol 值是一个对象的属性,它定义了它的默认迭代器,它被原生的类型(如 Array, String 等)实现,因此可以通过 for...of 循环遍历这些类型的对象。

下面是一个使用 Symbol.iterator 实现遍历自定义对象的例子:

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

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

上面的代码中,使用 Symbol.iterator 创建了一个自定义对象的迭代器,然后使用 for...of 循环来遍历该对象。

Symbol.toStringTag

这个 Symbol 值是一个对象的属性,它定义了在 toString() 方法中的标记字符串,用于标识对象类型。

下面是一个有 Symbol.toStringTag 属性的自定义对象的例子:

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

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

上面的代码中,使用 Symbol.toStringTag 属性定义了自定义对象的标记字符串,当调用该对象的 toString() 方法时,将会输出该标记字符串。

总结

本文详细解读了 Symbol 的特性和用法,可以发现 Symbol 可以在对象中作为标识符使用,并保证值的唯一性和不变性。此外,ES6 还定义了一些内置的 Symbol 值和函数,它们提供了丰富的功能和方便的操作。掌握了 Symbol 的知识,可以让我们更加灵活地处理对象,并优化我们的代码。

以上内容详细解读了 ECMAScript 2019 之 Symbol 新特性,希望这篇文章对读者有所帮助,有助于更好的理解和应用 Symbol 的相关知识点。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/652e42147d4982a6ebf4e31d


猜你喜欢

相关推荐

    暂无文章