隨著項目代碼量的增多,如何優(yōu)化項目代碼的健壯性冕广,是一直縈繞在腦海里,卻沒有停下來好好考慮的事情偿洁∪龊海總會遇到某一段函數(shù)的變量對象就突然找不到屬于它的方法了,排除半天涕滋,發(fā)現(xiàn)參數(shù)不知道什么時候變成了
undefined
睬辐。而對于書寫if(){}
總覺得性價比不高,書寫麻煩宾肺,占用空間溯饵,丑!于是總結(jié)許多經(jīng)常需要寫 if語句锨用,但可以用其他代替的情況瓣喊。主要是變量賦值判斷,函數(shù)執(zhí)行判斷黔酥,多種條件判斷藻三。
? if 條件語句
- 邏輯運算符簡化 -- 通過參數(shù)判斷是否執(zhí)行函數(shù)
編寫代碼的過程中洪橘,我們經(jīng)常面對的問題可能就是某一個函數(shù)所需要的變量可能會因為是undefined
導(dǎo)致代碼報錯,按照一般的編程習慣可能更喜歡寫if(Vue ){ console.error("blabla··")}
,說實話棵帽,寫的我手疼····熄求。而在Vue
的源碼中經(jīng)常看到類似這樣的一段代碼Vue && console.error("Vue is undefined")
逗概。
在邏輯判斷過程中弟晚,其實也函數(shù)執(zhí)行的過程。
·常用寫法
if(someThing){
toDo();
}
·優(yōu)雅寫法
someThing && toDo();
- 邏輯或(||)
只要第一個值的布爾值為false逾苫,就會永遠執(zhí)行第二位的toDo()函數(shù)卿城。
邏輯或?qū)儆诙搪凡僮鳎谝粋€值為true時铅搓,不再執(zhí)行第二位的toDo()函數(shù)瑟押,且返回第一個值。
- 邏輯與(&&)
只要第一個值的布爾值為true星掰,那么永遠返回第二個值多望。
邏輯與屬于短路操作,第一個值為false時氢烘,不再執(zhí)行第二位的toDo()函數(shù)怀偷,且返回第一個值。
- 邏輯運算簡化多中情況下的變量賦值
var x = a || b 等價于:
var x;
if(a){
x = a;
} else if(b){
x = b;
}
var x = a && b 等價于:
var x = a;
if(a){
x = b;
}
- 三目運算
if(a === true){ a ="真" }else{ a ="假" } 相當于三目運算 a === true ? "真" : "假"
-
switch/case
當條件判斷數(shù)量較大時播玖,可以采用switch/case
代替一長串的eles if(){}
switch (res.state) {
case 'SUCCESS':
//TODO
break;
case 'FAIL':
//TODO
break;
default :
//TODO
}
- 變量默認值
常用情況是在函數(shù)內(nèi)部椎工,形參作為變量傳入,但這個參數(shù)也可能不被傳入蜀踏,這時候我們可能就需要寫 if(!someName){someName ="rico_wang"}
來命名參數(shù)的默認值晋渺,實際上 someName = someName || "rico_wang"
通過邏輯運算符也可以達到同樣的效果。
- 當條件數(shù)量較多脓斩,但結(jié)果可能有共通性時
##例如
var name= null;
if(a = 1){
name = "wang"
}else if(a =2 ){
name = "li"
}else if(a = 3){
name = "wang"
}else if(a = 4){
name = "li"
}
完全可以簡化為:
var name= null;
if(a = 1|| a= 3 ){
name = "wang"
}else if(a = 2 || a = 4){
name = "li"
}
總結(jié):那么如何準確的選擇更簡潔的書寫方式呢
1、用作函數(shù)執(zhí)行前畴栖,參數(shù)存在與否的判斷随静,防止程序出錯
2、變量賦值吗讶,條件情況只有一種時 使用雙目運算對變量進行賦值
3燎猛、變量賦值,條件情況為多種照皆,僅選擇其中一種情況賦值
4重绷、在 if 條件情況較多,可使用switch/case代替