UglifyJS是一個對javascript進行壓縮和美化的工具,在它的文檔說明中,我看到了幾種關於if語句優化的方法。儘管我還沒用它去做一些嘗試性的測試,但從這裡可以看到它的確對js作了美化的工作。也許有人認為if語句就這麼簡單,能優化到什麼程度?但看看以下的幾種方式,你也許會改變看法。
一、使用常見的三元運算子
if (foo) bar(); else baz(); ==> foo?bar():baz();
if (!foo) bar(); else baz(); ==> foo ?baz():bar();
if (foo) return bar(); else return baz(); ==> return foo?bar():baz();
對於以上使用三元運算元來優化if語句你肯定不會陌生,或許你常使用它。
腳本之家給的例子:
100
二、使用and(&&)和or(||)運算子
if (foo) bar(); ==> foo&&bar();if (!foo) bar(); ==> foo||bar();
三、省略大括號{}
if (foo) return bar(); else something(); ==> {if(foo)return bar();something()}這種寫法你我都很熟悉,但我建議在程式碼優化的時候這麼做,或是交給UglifyJS幫你解決。畢竟少一個大括號,程式碼的可閱讀性並不高。
寫到這裡,我想到jQuery之父在《精通 JavaScript》中的一個取得HTML元素屬性的方法。
function getAttr(el, attrName){
var attr = {'for':'htmlFor', 'class':'className'}[attrName] || attrName;
};
仔細想想,好些時候我們都能找到解決問題的有效途徑,但關鍵在於我們是否用心去尋找更好的途徑。
【javascript技巧】if(x==null)簡寫
if(x==null)或if (typeof (x) == 'undefined')可以簡寫為if(!x),未經驗證。反之if(x)表示x非空
判斷物件是否存在
javascript || && 簡寫 if