欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript條件判斷使用小技巧總結(jié)

 更新時(shí)間:2022年09月03日 23:33:20   投稿:mdxy-dxy  
我們已經(jīng)知道,null?沒(méi)有任何的屬性值,并且無(wú)法獲取其實(shí)體(existence)值。所以?null.property?返回的是錯(cuò)誤(error)而不是?undefined?。

JavaScript條件判斷及高級(jí)用法總結(jié)

條件判斷常用

一、if/else語(yǔ)句

語(yǔ)句用于基于不同的條件來(lái)執(zhí)行不同的動(dòng)作

代碼

if ('條件語(yǔ)句1') {
    // 如果 條件語(yǔ)句1 為 true 執(zhí)行該代碼塊
} else if ('條件語(yǔ)句2') {
    // 如果 條件語(yǔ)句1 為 false 且 條件語(yǔ)句2 為 true 執(zhí)行該代碼塊
} else {
    // 如果 條件語(yǔ)句1 為 false 且 條件語(yǔ)句2 為 false 執(zhí)行該代碼塊
}

當(dāng) if 語(yǔ)句后面只執(zhí)行一句代碼的時(shí)候,可以省略花括號(hào)。換句話說(shuō),如果 if 語(yǔ)句沒(méi)有花括號(hào),則 if 語(yǔ)句只會(huì)考慮下一個(gè)語(yǔ)句

二、三元表達(dá)式

形式簡(jiǎn)寫(xiě) ====》條件?真結(jié)果:假結(jié)果
等同于其====》 if(條件){真結(jié)果}else{假結(jié)果}
三元表達(dá)式語(yǔ)句表達(dá)更簡(jiǎn)潔,但多條件會(huì)顯的冗余

?var ?isShow = true;
?isShow ? console.log(isShow ):console.log(isShow )
?// ?true

三元表達(dá)式在使用過(guò)程中不能使用break,continue等語(yǔ)句

三、或(||)與 (&&)語(yǔ)句

此用法高級(jí)而優(yōu)雅

1. ||(邏輯或)

短路表達(dá)式: 第一個(gè)為:true,則取第一個(gè)的值,如果第一個(gè)為false,則取第二個(gè)的值。
默認(rèn)轉(zhuǎn)譯: 0 , ”“ , nul , false , undefined , NaN 都會(huì)判為false

console.log (2||1);  //2
console.log ('a'||1);//'a'
console.log (''||1); //1

2. &&(邏輯與)

短路表達(dá)式: 第一個(gè)為:true,則執(zhí)行&&后的語(yǔ)句,如果第一個(gè)為false,則執(zhí)行“&&”前面的值。

console.log (2 && 1);? //1
console.log ('a' && 1);//1
console.log ('' && 1); // ''

四、switch/case語(yǔ)句

語(yǔ)句 只能有一個(gè)表達(dá)式(expression)

語(yǔ)句 case 后面只能是常量,不能是表達(dá)式,也就是說(shuō) switch 語(yǔ)句的判斷條件只能跟一個(gè)常量進(jìn)行比較。

用break的作用就是跳出switch

// add_step 與 case設(shè)定的常量值進(jìn)行比較賦值 
var change_level = 0; 
switch(change_step){ 
case 5 : change_level = 1; 
    break; 
case 10 : change_level = 2; 
    break; 
case 12 : change_level = 3; 
    break; 
case 15 : change_level = 4; 
    break; 
default : change_level = 0; 
    break;
}

優(yōu)雅升級(jí) A

此方法是利用對(duì)象屬性值的方式

var change_level={'5':1,'10':2,'12':3,'15':4}[change_step] || 0;?

優(yōu)雅升級(jí) B

此方法也可以按著數(shù)值區(qū)間進(jìn)行判斷

var change_step = 15;
var change_level =
? ? ? (change_step == 15 && 4) ||
? ? ? (change_step == 12 && 3) ||
? ? ? (change_step == 10 && 2) ||
? ? ? (change_step == 5 && 1) ||
 ? ? ? 0;
console.log(change_level);

五、null與undefined

我們已經(jīng)知道,null 沒(méi)有任何的屬性值,并且無(wú)法獲取其實(shí)體(existence)值。所以 null.property 返回的是錯(cuò)誤(error)而不是 undefined 。

考慮下面的代碼

if (node.nextSibling.className == ...) {
...
}

在 node 或者 node.nextSibling 為空(null)的情況下,會(huì)返回錯(cuò)誤(error)。所以,通常情況下的解決方案的代碼為

if ((node) && (next = node.nextSibling) && ... ) {
...
}

那么,當(dāng)條件判斷一多的情況下,代碼會(huì)形成下面的情況

if (
(node) &&
(node.nextSibling) &&
(node.nextSibling.className == ...)
... ) {
...
}

隨著判斷條件的不斷的增加,代碼會(huì)變得非常的“丑陋”。
有個(gè)小的“伎倆”,可以簡(jiǎn)化條件判斷表達(dá)式。我們可以增加個(gè)空對(duì)象({})或者零(0)作為替代

if ( next = (node || 0).nextSibling) ) {
...
}

那么,上述的代碼就可以這樣寫(xiě)

if (((node || 0).nextSibling || 0).className == ...) {
...
}

就個(gè)人而言,上述的從某種角度而言,代碼會(huì)非常的精簡(jiǎn)。但日常實(shí)際的編碼過(guò)程中,尤其是多人配合的情況下,這些代碼可能會(huì)給其他開(kāi)發(fā)人員造成一定的困擾。

正如 小馬 所言,如果已經(jīng)在使用某些框架,需要具體問(wèn)題具體分析。比如上述的條件判斷代碼,使用 YUI 編碼就可以使用

YAHOO.util.Dom.hasClass(el, className)

顯得更加的精簡(jiǎn),并且相比上述的代碼更容易理解。

總結(jié)

執(zhí)行效率:

  • switch case會(huì)生成一個(gè)跳轉(zhuǎn)表來(lái)指示實(shí)際的case分支的地址,應(yīng)用多分分支條件中
  • switch case 缺點(diǎn)只能處理字符或者數(shù)字類(lèi)型的變量【可用以上升級(jí)方案】
  • 而if…else卻需要遍歷條件分支直到命中條件,(可用于少量判斷條件)

相關(guān)文章

最新評(píng)論