Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Symbol.prototype比较错误_Javascript - Fatal编程技术网

Javascript Symbol.prototype比较错误

Javascript Symbol.prototype比较错误,javascript,Javascript,为什么会出现此错误: Uncaught TypeError: Symbol.prototype [ @@toPrimitive ] requires that 'this' be a Symbol 我什么时候运行这个代码 3 == Symbol.prototype 我仍在试图自己找出原因,目前为止,我使用一个try catch块按住它一段时间,但我想知道错误的原因。因为执行=(邋遢)比较尝试使用@@toPrimitive将符号转换为原语值,但这仅适用于符号类型和符号。原语不是符号类型,而是对

为什么会出现此错误:

Uncaught TypeError: Symbol.prototype [ @@toPrimitive ] requires that 'this' be a Symbol
我什么时候运行这个代码

3 == Symbol.prototype

我仍在试图自己找出原因,目前为止,我使用一个
try catch
块按住它一段时间,但我想知道错误的原因。

因为执行
=
(邋遢)比较尝试使用
@@toPrimitive
符号转换为原语值,但这仅适用于符号类型和
符号。原语
不是符号类型,而是对象类型

例如,可以这样做,调用
Symbol()
创建一个具有符号类型的新值,因此可以使用
@@toPrimitive
将其转换为原语值


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

  • 尝试将
    Symbol.prototype
    作为参数调用
    ToPrimitive
    来强制将
    Symbol.prototype
    设置为
    Symbol.prototype
    ,然后将其作为参数使用。这是由于执行强制操作,并且第一个操作数是一个数字

  • Symbol.prototype[@@toPrimitive]
    依次调用。在这里,您可以开始注意问题,
    不是符号

  • thisSymbolValue
    被指定为在
    既不是符号也不是带有[[SymbolData]]的对象时抛出类型错误(无进一步详细信息,例如,您还会在chrome和FF[1]上收到不同的消息)



[1] 在我的FF 60.0.1上尝试比较基元(
3
)和对象(
Symbol.prototype
)时,“TypeError:[Symbol.toPrimitive]方法在不兼容对象上调用了该方法”,如下所示:

让obj={
[Symbol.toPrimitive](){
console.log(“@@toPrimitive被调用!”);
}
}

console.log(0==obj)
为什么要首先运行此代码?它是为我的个人项目运行的。我想在这种情况下创建对象原型及其所有属性的备份:
String.prototype.toLowerCase=null;“你好,世界!”。toLowerCase()/*错误*/
。因此,原型及其属性的备份将消除此问题
String.prototype.toLowerCase=null;BackedUpStringPrototype.toLowerCase.call(“你好,世界!”)/“你好,世界!”…假设
Function.prototype.call
没有出错,我明白了。但是它仍然不能解释为什么你要用
==
符号.prototype
与一个数字进行比较。这是我调试项目时测试的一部分,我注意到了这个错误,这在当时对我来说是很新的。好吧,这不是代码中的实际问题,而是当你遇到它时让你好奇的事情?使用
==
应该比使用
try
/
catch
更好地解决问题。