Javascript條件判斷使用小技巧總結(jié)
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)。換句話(huà)說(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)文章
基于css3新屬性transform及原生js實(shí)現(xiàn)鼠標(biāo)拖動(dòng)3d立方體旋轉(zhuǎn)
這篇文章主要介紹了基于css3新屬性transform及原生js實(shí)現(xiàn)鼠標(biāo)拖動(dòng)3d立方體旋轉(zhuǎn) 的相關(guān)資料,需要的朋友可以參考下2016-06-06
JS設(shè)置定時(shí)循環(huán)執(zhí)行某任務(wù)的方法示例
在Web前端開(kāi)發(fā)中,定時(shí)執(zhí)行某個(gè)任務(wù)是常見(jiàn)的需求之一,無(wú)論是為了實(shí)現(xiàn)輪詢(xún)服務(wù)器獲取最新數(shù)據(jù)、定期更新用戶(hù)界面還是其他周期性操作,JavaScript提供了多種方法來(lái)設(shè)置定時(shí)循環(huán),本文將深入探討如何使用setTimeout和setInterval來(lái)定時(shí)執(zhí)行任務(wù),需要的朋友可以參考下2025-02-02
從jQuery.camelCase()學(xué)習(xí)string.replace() 函數(shù)學(xué)習(xí)
camelCase函數(shù)的功能就是將形如background-color轉(zhuǎn)化為駝峰表示法:backgroundColor。2011-09-09
使用iframe window的scroll方法控制iframe頁(yè)面滾動(dòng)
在頁(yè)面中如何控制內(nèi)嵌的iframe滾動(dòng)呢?方法是使用iframe window的scroll方法,大家可以參考下面的示例2014-03-03
Javascript中this關(guān)鍵字的一些小知識(shí)
這篇文章主要介紹了Javascript中this關(guān)鍵字的一些小知識(shí),本文講解了this的隱性綁定、var that = this兩部份內(nèi)容,需要的朋友可以參考下2015-03-03
JavaScript進(jìn)階(四)原型與原型鏈用法實(shí)例分析
這篇文章主要介紹了JavaScript原型與原型鏈,結(jié)合實(shí)例形式分析了JavaScript原型與原型鏈基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05

