ES6 引入了一种新的基本数据类型 Symbol
,它是一种类似于字符串的数据类型,但具有唯一性。在使用时,我们可以给 Symbol 变量赋值一个描述,但这个描述只是一个可选参数,不会影响这个 Symbol 变量的唯一性。
Symbol 的创建
在创建 Symbol 时,我们可以使用 Symbol()
函数来创建一个全局唯一的 Symbol 变量。
----- ------- - --------- ----- ------- - --------- ------------------- --- --------- -- -----
上述代码创建了两个不同的 Symbol 变量,它们在内存中的地址是不同的,所以它们不相等。
我们也可以使用可选参数给 Symbol 变量添加一个描述,这个描述将作为 Symbol 变量的注释,方便我们在开发时识别不同的 Symbol 变量。
----- ------- - -------------- ----- ------- - -------------- ------------------- --- --------- -- -----
上述代码创建了两个描述相同但不相等的 Symbol 变量,它们的描述不会影响它们的唯一性。
Symbol 的应用场景
1. 属性名
Symbol 变量可以作为对象属性的名称,使用 Symbol 变量作为属性名可以避免属性名的冲突,因为它们是全局唯一的。
----- ----- - --- ----- ------ - --------- ------------- - -------- --------------------------- -- -------
上述代码创建了一个名为 MY_KEY
的 Symbol 变量,并将它作为 myObj
对象的属性名。这样,我们就可以使用 Symbol 变量来作为对象属性的名称了。
2. 迭代器
Symbol 还可以用来创建迭代器,实现对象的可迭代性。
----- ---------- - --- --------------------------- - --------- -- - ----- -- ----- -- ----- -- -- ---------------- -- --- -- --
上述代码创建了一个包含三个元素的可迭代对象 myIterable
,当我们使用扩展运算符将其转化为数组时,得到的结果为 [1, 2, 3]
。
3. 内置迭代器
ES6 中的一些内置迭代器使用了 Symbol 变量作为属性名,例如 Map
和 Set
类型中的迭代器方法。我们可以使用这些迭代器方法来遍历 Map
和 Set
中的元素。
----- ----- - --- ------ ------------ ------- ------- ------- --- ------ ----- ------ -- ------ - ---------------- ------- -- - ------- - ----- -
上述代码创建了一个 Map
类型的对象 myMap
,它包含了两个键值对。我们可以使用 for...of
循环来遍历 myMap
中的元素。
总结
Symbol 变量是 ES6 中的新数据类型,它具有唯一性、可作为属性名和迭代器等特性。在编写代码时,我们可以使用 Symbol 变量来避免属性名的冲突,同时也可以方便地遍历对象中的元素。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e1e957f6b2d6eab3d33191