gpt4 book ai didi

javascript - Symbol.prototype 比较错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:03 26 4
gpt4 key购买 nike

为什么会出现此错误:

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

我什么时候运行这段代码?

3 == Symbol.prototype

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

最佳答案

因为执行== (马虎)比较试图转换 Symbol.prototype使用 @@toPrimitive 到原始值但这仅适用于符号类型和 Symbol.prototype不是符号类型,而是对象类型。

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

console.log(Symbol() == 3);

或使用 ===而不是 == (通过使用严格相等,JS 引擎不会尝试将 Symbol.prototype 转换为其原始值)

console.log(Symbol.prototype === 3);

甚至可以使用 == 将其与其他对象进行比较(也不会尝试将 symbol.prototype 转换为其原始值)

console.log(Symbol.prototype == {});

但是整个测试是毫无意义的,因为你不能真正改变Symbol.prototype所以它永远不会等于 3 ,因此您只需将比较代码替换为 false .

做这样的事情 Symbol.prototype = 3;Symbol.prototype 后将永远无法工作是 Symbol 的只读属性函数,它是浏览器 native 代码的一部分。

关于javascript - Symbol.prototype 比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com