20200418
Plan
- 你不知道的 js 下卷
Notes
Symbol
- 不能被 new
- typeof 输出的是 "symbol"
- instanceof Symbol 返回的是 false
- valueOf 返回的是 Symbol
意义 创建一个类字符串的不会与其他任何值冲突的的值。
Symbol 的注册
Symbol 的全局注册:
const a = Symbol.for("a"); // 如果存在 Symbol(a) 则返回,不存在则创建
如果不是全局注册的话,那么创建的 Symbol 变量需要保存在全局或者最外层,以便能随时访问。所以就有了 Symbol 的全局注册机制。
Symbol 本身是为了创建独一无二的值,比如 Symbol("abc") !== Symbol("abc")的。但是在 Symbol.for 中,又是通过字符串来比较的。
属性对象
- 作为对象的属性时,是不可枚举的。不能被 for...in
- 可以通过 Object.getOwnPropertySymbols 来获取
内置符号
- 不会注册在全局符号表中
举例:
- Symbol.iterator -- 规范一般使用 @@ 前缀来表示内置符号,这里的 iterator -- @@iterator
More
元编程是什么?