天天看點

JS程式設計建議——26:小心if嵌套的思維陷阱

建議26:小心if嵌套的思維陷阱

人的思維是非常複雜的,這在一定程度上會增加if結構嵌套的複雜性。假設有4個條件,隻有當這些條件全部成立時,才允許執行某件事情。遵循人的一般思維習慣,在檢測這些條件時,常常會沿用下面這種結構嵌套:

if(a){

if(b){

if(c){

if(d){

alert("所有條件都成立!");

}

else{

alert("條件d不成立!");

alert("條件c不成立!");

alert("條件b不成立!");

alert("條件a不成立!");

從思維的方向性上來考慮,這種結構嵌套并沒有錯誤,使用下面這個if結構來表示更為簡單。

if(a && b && c && d){

從設計時的本意來考慮:使用if語句逐個驗證每個條件的合法性,并且對某個條件是否成立進行提示,以友善跟蹤每個條件。但是,如果使用了上面的if結構多重嵌套,就會出現另一種可能: a條件不成立,程式會自動退出整個嵌套結構,而不管b、c和d的條件是否成立。這種“武斷”很容易給測試帶來“傷害”。如果核心的處理過程包含多條語句,或者出錯的情況處理更為複雜,層層包裹的if結構會使代碼嵌套過深,難以編輯。 為避免上述情況的發生,一般采取排除法,即對每個條件進行排除,條件全部成立再執行特定的操作。為了能夠把條件有機地聯系在一起,這裡使用了一個布爾型變量作為鈎子把每個if條件結構串在一起。

var t = true; // 初始化行為變量為true

if(!a){

t = false;

if(!b){

if(!c){

if(!d){

if(t){

排除法有效地避免了條件結構的多重嵌套,并且更加符合人的思維模式。當然,這種設計方法也存在一定的局限性,一旦發生錯誤,就要放棄後面的操作。如果僅為了檢查某個值的合法性,也就無所謂了。如果為了改變變量值和資料操作等,那麼直接放棄就會導緻後面的資料操作無法進行,為了防止此類問題的發生,不妨再設計一個标志變量來跟蹤整個操作行為。

繼續閱讀