在之前我們討論到布林運算子 && 和 || 的時候,我說過它們的結果是布林值。這樣說起來有點過於簡化了。如果你用它們來計算布林資料類型,它們確實會傳回布林值。但是它們也能用來計算其他的類型的數據,這種時候,回傳的就將是其中的一個參數了。
或運算子「||」 真正做的事是這樣的:它首先檢查一下它左邊的參數,如果轉換成布爾類型的值後為true,那麼就返回左邊的參數,否則就傳回右邊的參數。 仔細想想當運算子兩邊都是布林類型的值的時候,是不是這樣的。為什麼它這樣運作?這樣運作的結果其實非常實用。讓我們來看這個範例:
var input = prompt(" What is your name?", "Kilgore Trout");
alert("Well hello " (input || "dear"));
如果使用者按「取消」或直接關掉prompt對話框,input的值會是null或「」。這兩種情況下,轉換成布林類型的值都是false。那麼這時候 input || “dear” 這個表達式的意思是input有值的時候就得到input的值,否則就得到“dear”。這是一個很簡單的提供一個預設值的方法。
與運算子 “&&” 的工作原理類似,但與 “||” 正好相反。當它左邊的參數轉換成布林類型的值為「false」的時候,它就回傳那個值,否則回傳右邊的值。這兩個運算子還有一個特點就是,只有在必要的時候,才會計算它右邊的表達式的值。在「true || X」 這個表達式中,不管X是什麼,結果都是true,所以X就不會被計算,如果X有其他的效果,那這個效果也不會產生。 「false && X」 也是同樣的道理。
false || alert("I'm happe!" );
true || alert("Not me.");