你了解if語句嗎?
阿新 • • 發佈:2017-09-10
cti 錯誤 defined 轉換 function undefine {} 描述 bsp
一、if(a)語句中的a是真是假
var bool = new Boolean(false); if (bool) { console.log(‘true‘); } else { console.log(‘false‘); }
運行結果為true,因為bool是一個對象,空對象。
var a = [0]; if ([0]) { console.log(a == true); } else { console.log("camille"); }
運行結果為false,因為[0]是一個引用類型,不是假值,於是進入if語句;又因為比較[0]和true前,會做隱式轉換,[0]轉換為數字是0,true轉換為數字是1,那麽0==1,結果為false是情理之中的事。
//綜上 假值:0,+0,-0,NaN,"",false,undefined,null 非假值:Infinity,‘0‘,‘false‘," ",[],{},function(){}
二、if (a && b)的含義
&&是種短路語法,求值後不一定是個Boolean類型,更不是兩邊轉化布爾值再運算,而是a && b進行表達式求值後,然後再轉換為Boolean類型。
比如 2&&3 的結果是3,不是true。
所以if(a && b),我們平常理解的那種,"如果a和b同時為真,就如何如何",是一種錯誤的描述方式。邏輯或 || 也是如此,先進行表達式求值,再轉換為Boolean類型。
你了解if語句嗎?