首页 > 解决方案 > Symbol.prototype 比较错误

问题描述

为什么我会收到此错误:

Uncaught TypeError: Symbol.prototype [ @@toPrimitive ] requires that 'this' be a Symbol

当我运行这段代码时?

3 == Symbol.prototype

我仍在尝试自己找出原因,到目前为止,我使用一个try-catch块将其按住一段时间,但我想要一个错误的原因。

标签: javascript

解决方案


3 == Symbol.prototype执行以下操作(可能已知的部分保持简短):

  • 尝试Symbol.prototype通过将其作为参数调用来强制转换为原语,ToPrimitive而该参数又将使用Symbol.prototype[@@toPrimitive](this设置为Symbol.prototype)。这是由于松散的相等性进行强制并且第一个操作数是数字。

  • Symbol.prototype[@@toPrimitive]依次调用thisSymbolValue(this value)。到这里就可以开始注意到问题了,this不是Symbol。

  • thisSymbolValue当既不是 Symbol 也不是具有 [[SymbolData]] 的对象时,指定抛出 TypeError(没有更多细节,例如,您还会在 chrome 和 FF [1]上收到不同的消息)。this


[1]:我的 FF 60.0.1 上的“TypeError: [Symbol.toPrimitive] 方法在不兼容的对象上调用”


推荐阅读