1. 解释
symbol 是一种基本数据类型(primitive data type)。
Symbol() 函数会返回 symbol 类型的值。每个从 Symbol() 返回的 symbol 值都是唯一的。
2. 语法
Symbol([description])
参数 description:可选的,字符串类型。
3. 介绍
使用 Symbol() 创建新的 symbol 类型:
- 1
- 2
- 3
上面的代码创建了三个新的 symbol 类型,但要注意每个从 Symbol() 返回的值都是唯一的:
- 1
代码解释: 每个 Symbol() 方法返回的值都是唯一的,所以,sym2 和 sym3 不相等。
Symbol() 作为构造函数是不完整的:
- 1
这种语法会报错,是因为从 ECMAScript 6 开始围绕原始数据类型创建一个显式包装器对象已不再被支持,但因历史遗留原因, new Boolean()、new String() 以及 new Number() 仍可被创建:
- 1
- 2
- 3
- 4
- 5
- 6
4. 使用场景
- 当一个对象有较多属性时(往往分布在不同文件中由模块组合而成),很容易将某个属性名覆盖掉,使用
Symbol值可以避免这一现象,比如vue-router中的name属性。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
代码解释: 两个不同文件使用了同样的 Symbol('index') 作为属性 name 的值,因 symbol 类型的唯一性,就避免了重复定义。
- 模拟类的私有方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这种情况通过类的实例是无法取到该方法,模拟类的私有方法。
但是,TypeScript 是可以使用 private 关键字的,所以这种方法可以在 JavaScript 中使用。
- 判断是否可以用
for...of迭代
- 1
- 2
- 3
- 4
- 5
这个知识点后续会在 迭代器 那一节会着重介绍,这里可以先知晓:
for...of循环内部调用的是数据结构的Symbol.iterator方法。for...of只能迭代可枚举属性。
- Symbol.prototype.description
Symbol([description]) 中可选的字符串即为这个 Symbol 的描述,如果想要获取这个描述:
- 1
- 2
- 3
- 4
- 5
5. 小结
本节介绍了 Symbol 一些常见的使用方法,虽然较少使用,但在特定场景非常有用
鲁ICP备案14017198号