Javascript:非空字符串的“truthy”值

时间:2017-07-27 17:41:54

标签: javascript

据说Javascript中的非空字符串被认为是“真实的”。它解释了为什么代码:

if ("0") { 
    console.log("OK")
}

打印“确定”。

但是,为什么代码:

true == "0"

返回false?

2 个答案:

答案 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");
}