也不是閒着沒事去看壓縮代碼,但今天調試本身代碼的時候發現有點意思。由於是本身寫的,雖然壓縮了,格式化以後仍是很好辨認。固然做爲min的首要準則不是可讀性,而是精簡。那麼它會盡可能的縮短代碼,儘可能的保持一行,最大化的減小的空白。咱們經常使用的分號都會被替換成了逗號,短句變成了連貫的長句。函數
var self=this; function a(){} self.a=a; function b(){} self.b=b; return self;
會替換成:this
function a(){} function b(){} var s={} return s.a={},s.b={},s
注意到最後的s 不能漏了,return會以最後一個表達式的結果爲準。編碼
function rt(n) { return n; } function xx() { return rt(1), rt(2); }
執行xx()獲得的是2,若是 rt(2)後面還有個不返回值的函數執行,那麼xx()會獲得undefined。spa
false-->!1 true-->!0
if語句是壓縮最多的地方。調試
function load() { if (t) { x = false; log("error"); return; } console.log("22") }
好比個人原函數大概是這樣。壓縮後成了這樣:code
if (t) return x =!1,void log("error")
function foo() { if (!x) { return; } console.log("doA"); console.log("doB"); }
壓縮後:blog
function f() { x || console.log("doA"), console.log("doB"); }
這樣蠻不錯的。同理:io
if(x&&y){
doa();
dob();
}
doc();
--> x&&y&&(doa(),dob()),doc()
本來四行變成了一行代碼。console
3).爲了合併一行,這也行:function
console.log("doA"); console.log("doB"); if (x>0) { console.log("true"); }
合併成這樣:
if (console.log("doA"), console.log("doB"), x > 0) console.log("true");
平時這麼寫可能不太友好,重點是在if語句中,最後一句纔是判斷句。結合以前的return。想必對逗號語句有了深入的認識。
4)throw也不放過
if (errMsg) { util.triggerCallback(fail, "模型驗證錯誤"); throw Error(errMsg); }
壓縮後:
if (a) throw x.triggerCallback(o, "模型驗證錯誤"), Error(a)
調換了語句的順序,把throw當作return 就明白了。
5) if else
這個會替換成三元表達式 a?b:c 。
var offset = 0; while (true) { if (offset >= bufferLength) { break; } }
會替換成這樣:
for (var n = 0; ; ) { if (n >= K) break }
確實不錯,節省了一行代碼。
以上只是獨自對比本身的代碼發現的一些東西,有的能夠在平時的編碼中用起來,固然不是追求全部代碼都寫成一行,這樣可讀性比較差,另外可能你下次看壓縮代碼就不那麼費勁了。歡迎補充。