2014-02-25 64 views

回答

0

使用==时,有规则类型转换。

  • 如果其中一个操作数是布尔型,那么布尔型操作数将被转换为1(如果它为true)和0(如果它为假)。
  • 如果对象与数字或字符串进行比较,JavaScript会尝试 以返回对象的默认值。运算符尝试使用对象的valueOf和toString方法将对象转换为原始值(字符串或数字值),即 。如果此 尝试转换对象失败,则会生成运行时错误。

所以truefalse转换为10

test.toString()返回字符串"[object Object]"这不等于0也不1

+0

'console.log({} ==“[object Object]”); // true'现在有道理:) – Jonathan

3

if(test)返回true,因为如果test对象定义/存在此条件将返回true。如果testundefinedNANnullfalse""它将返回false。

而且比较其他不言自明,因为这是

if (test == true) 

也将返回false test不是能与true可以比较一个布尔值。取而代之的是,你可以试试这个比较

if (test["one"] == "1") 
    console.log("true") 

Js FIddle Demo

1
if (test) console.log("if"); 

返回true,因为如果对象存在/定义它正在检查。

if (test == true) console.log("true"); // false 
if (test == false) console.log("false"); // false 

返回false,因为测试是不是布尔所以不能比较,真的还是假的。所以它将永远是false