如果两个操作数的类型不同,JavaScript会将操作数进行转换,然后执行严格比较。如果任何一个操作数是数字或布尔值,则尽可能将其转换为数字;否则,如果任何一个操作数是字符串,则尽可能将另一个操作数转换为字符串。
考虑到这一点,我将评估"true" == true
如下:
- 它们是相同类型的吗?否
- 是否有一个操作数是数字或布尔值?是
- 我们可以将两者都转换为数字吗?不能 (
isNaN(Number("true")) // true
) - 是否有一个操作数是字符串?是
- 我们可以将另一个操作数转换为字符串吗?可以 (
String(true) === "true" // true
)
我最终得到了字符串"true"
和"true"
,应该评估为true
,但是JavaScript显示为false。
我错过了什么?
if("true" == true) {console.log("yes")} else {console.log("no")}; if("true") {console.log("yes")} else {console.log("no")}
---> "no yes" - user1068352