2013年5月23日 星期四

神秘的 JavaScript 邏輯運算

JavaScript 邏輯運算子有個非常有趣的特性,最近遇到跟大家分享一下。(眾人: 連用個邏輯運算你都會有問題去跪算盤吧)

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);

沒有留言:

張貼留言

部落格是發表個人言論的地方,歡迎您給留言來進行討論與給予指教,但也希望您以理性開放的態度來看待文章內容,如果我也會尊重您的留言一般。謝謝