20200418

@xiaojingzhao

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 来获取
内置符号
  • 不会注册在全局符号表中

举例:

  1. Symbol.iterator -- 规范一般使用 @@ 前缀来表示内置符号,这里的 iterator -- @@iterator

More

元编程是什么?