首先请看官网,然后明确下面几个基本知识点
- Symbol 是 es6 提出,是基本数据类型
- typeof SymbolInstance= symbol
- 不支持 new 语法
- 每个 Symbol() 返回的值都是唯一的
- 可以作为对象的属性,且是唯一的属性
- 有内置通用 symbol,可以使用属性访问
- 迭代
- Symbol.iterator 返回一个对象默认迭代器的方法,被 for … of 使用
- 可以显式使用arr[Symbol.iterator]()
- 正则表达式
- Symbol.match 对字符串进行匹配的方法,也用于确定一个对象是否作为正则表达式使用,被String.prototype.match 使用
- Symbol.toPrimitive
- 一个对象转为基本数据类型的方法【彻底搞懂隐式转换】
- Symbol.toStringTag
- 用于对象的默认描述的字符串值,被 Object.prototype.toString 使用
- 迭代
Symbol 应用场景
- 创建唯一的对象键,作为对象的唯一属性,避免名字冲突,也不怕和原型上的变量冲突了
- 作为对象 / class 的私有成员,因为只有持有对应符号的引用的代码才能访问它们
- 隐藏性,不会再 for…in 循环中,也不会被 Object.keys 等方法返回
- 使用内置符号,如 Symbol.iterator用于迭代器
- 在 ajax 中使用 symbol