据说Javascript中的非空字符串被认为是“真实的”。它解释了为什么代码:
if ("0") {
console.log("OK")
}
打印“确定”。
但是,为什么代码:
true == "0"
返回false?
答案 0 :(得分:2)
等于(==)
如果两个操作数的类型不同,则JavaScript会转换 操作数然后应用严格的比较。如果任一操作数是一个数字 或者布尔值,如果可能,操作数将转换为数字;其他 如果任一操作数是一个字符串,则另一个操作数转换为a 如果可能的话。如果两个操作数都是对象,那么JavaScript 比较操作数引用时相等的内部引用 内存中的同一个对象。
(来自Mozilla开发者网络中的比较运算符)
因此,在比较true == '0'
时,它首先将两者都转换为数字。
Number(true) == Number('0')
评估为1 == 0
。
因此答案是错误的。
答案 1 :(得分:0)
正如其他人指出的那样,我相信 if ("0")
会检查值是否为空/空/未定义,就像我要写的 if("some text")
一样,它也会返回 true。此处的 0
不用作 true 或 false,而是用作字符串。
另一方面,if(true == "0")
将返回 false,因为值不匹配。
这里是一个片段,显示了一个 if 语句在一个未定义的变量上返回 true。
var someVar = "0";
if("") {
console.log("this doesn't execute");
}
if(someVar) {
console.log("this returns true");
}