知名符号是一些具有特殊含义的共享符号,我们可以通过 Symbol 函数的静态属性得到这些知名符号
ES6 用知名符号暴露了某些场景的内部实现
我们知道一个关键字叫做 instanceof,我们可以用 obj instanceof A 来判断 A.prototype 是否在 obj 的原型链上。实际上,究其内部细节,实际上是构造函数上有一个 Symbol 属性,改属性是一个函数,这个函数就可以用来判断自己的 prototype 是否在指定对象的原型链上,我们可以使用 Symbol.hasInstance 拿到这个属性。
改属性实际上是放在
Function.prototype上的。
js
obj instanceof A
//等效于
A[Symbol.hasInstance](obj) // Function.prototype[Symbol.hasInstance]Symbol.isConcatSpreadable 该知名符号会影响数组的 concat 方法
Symbol.toPrimitive 该知名符号会影响类型转换的结果
Symbol.toStringTag 该知名符号会影响 Object.prototype.toString 的返回值
其他知名符号