JS 的邏輯運算不會改變運算元的型別,而只是在運算時會將其視為 Boolean 來處理。因為這個特性,"最後" 運算完的值不一定是 Boolean。以下面的程式作為例子:
第一個 alert 中的 str || obj,因為 'hello' 轉換為 Boolean 時視為 true,由於 short path,就直接返回了,結果是 hello (WTF!)。
第二個 alert 中的 str && obj,由於 'hello' 是 true,因此要檢查 obj ,當然啦 obj 也是 true,雖然看起來很像是 false ... (參考 http://www.w3schools.com/js/js_obj_boolean.asp),因此返回後面的結果, object。
也就是說,其實寫在 if 裡面的結果是在最後又被轉換成 Boolean 才判斷的。
http://jsfiddle.net/welkineins/reJp9/
var str = 'hello';
var obj = {};
alert(str || obj);
alert(str && obj);