自己總是記不清...混淆
第一類已定義的變量但未賦值在if中認為是假;
第二類已定義的變量,賦值為空字符串在if中認為是假,賦值為其他的字符串,也就是是字符串中有字符(即使是"空格字符")就認為是真;
第三類已定義的變量,賦值為true在if中認為是真,賦值為false,則為假,這和其他語言中bool的類型的變量是一樣的;
第四類已定義的變量,賦值為0(不管是0,還是0.0)在if中則為假,其他數值認為是真,這和c語言中數值的類型的變量是一樣的;
第五類js中的特殊值null,undefined,都是假(由于在js中未定義的變量默認值是undefined,因此這也就解釋了第一類情況);
第六類已定義的函數,根據調用方式又分為兩種
第一種:不帶括號的,如果定義了就是真,沒有定義會報錯,
第二種:帶括號的,其實相當于調用函數,自然是根據函數的返回值判斷真假;
第七類已定義的對象,未賦值時在if中則為假,賦值后是真(其實由于在js中變量在沒有賦值時是沒有類型的,因此和第一種情況是一樣的);
第八類已定義的對象的屬性字段,和單獨的變量是一樣的,例如數值型為0時是假,其他為真,字符串型是為空值時是假,其他為真;
第九類已定義的對象的方法,和單獨的函數是一樣的
不加括號是如果沒定義就是假,加了括號相當于調用方法,就是根據返回值判斷真假;
總結:最基本是null,undefined,if判斷都是假;對于數值類型,0是假,其他為真;對于字符類型空字符串是假,其他為真,對于方法屬性,如果定義了就是真,否則就是假,其他所有都可以看做是這些的變相應用。
借鑒于關于if語句的真假的判斷