Symbols

Symbols 是 ES6 引入的原始类型。

Symbols 无字面量,通过 Symbol() constructor 创建, Symbol() 接受一个可选的 string 参数,用于描述这个 symbol。

const s = Symbol('a symbol')
typeof s // "symbol"
s        // Symbol(a symbol)

每次调用 Symbol() 都创建一个唯一的的 symbol,比较适合用作 object keys。

Well-known symbols

Symbol.iterator

iterable 的标识是 [Symbol.iterator] 属性。

var str = 'abc'
typeof str[Symbol.iterator] // "function"

Symbol.toStringTag

对象的 [Symbol.toStringTag] 属性为 class tag。

var m = new Map()
Object.prototype.toString.call(m) // "[object Map]"
m[Symbol.toStringTag] // "Map"

为自定义 class 添加 tag

class A {
  get [Symbol.toStringTag]() {
    return 'A'
  }
}

const a = new A()
Object.prototype.toString.call(a) // "[object A]"
a[Symbol.toStringTag] // "A"

参考