如果两个操作数的类型不同,JavaScript 会转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则尽可能将操作数转换为数字;否则,如果任一操作数是字符串,则尽可能将另一个操作数转换为字符串。
考虑到这一点,我将评估"true" == true
如下:
- 它们是同一类型吗?不
- 操作数是数字还是布尔值?是的
- 我们可以将两者都转换为数字吗?否(
isNaN(Number("true")) // true
) - 任一操作数都是字符串吗?是的
- 我们可以将另一个操作数转换为字符串吗?是(
String(true) === "true" // true
)
我最终得到了字符串"true"
and "true"
,它的计算结果应该是true
,但 JavaScript 显示为 false。
我错过了什么?