2014-02-25 108 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