1. 程式人生 > >你了解if語句嗎?

你了解if語句嗎?

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語句嗎?