布爾運算符 && 和 ||的返回結果不一定是布爾值!由此來展開一定的研究及理解。
1.首先先介紹下常見的數據類型轉化為bool后的值。
(常用地方)在if表達式中,javascript先把條件表達式轉換成bool值再進行判斷
2.下面來介紹下邏輯與&& 邏輯非|| 的運算后的返回結果
邏輯與 &&
由上面結果可以看出。邏輯與&&中,當左側表達式為 真值,結果則返回右側表達式;當左側表達式為 假值,結果則返回左側表達式;
也就是
var i="真值" && "任意值" ;=> i結果為任意值 var i="假值" && "任意值"; => i 結果為左側假值 //假值包括 null false 0 undefined 空字符串
邏輯或 ||
由上面結果可以看出。邏輯或||中,當左側表達式為 真值,結果則返回左側表達式;當左側表達式為 假值,結果則返回右側表達式;
var i="真值" || "任意值" ;=> i結果為’真值’ //真值包括 object function 0之外的數字 字符串 var i="假值" || "任意值"; => i 結果為‘任意值’
3.邏輯與&&和邏輯或||都屬於短路操作。
什么叫做短路操作呢,即如果第一個操作數能夠決定結果,那么就不會再對第二個操作數求值。
var found = true; var result = (found && someUndefineVariable); //這里會發生錯誤 alert (result); //這里不會執行
在上面代碼中,當執行邏輯與操作時會發生錯誤,因為變量someUndefineVariable沒有聲明,由於found為true,所以邏輯與會對變量someUndefineVariable求值,由於someUndefineVariable沒定義,所以會報錯,如果found為false的話,則不會對someUndefineVariable進行求值,就有輸出結果。 (ps不能再邏輯與中使用未定義的值)。邏輯非||也與邏輯與&&類似,當左側表達式為 真值時,則不對右側表達式進行求值。