使用命令對(duì)象代替switch語句的寫法示例
曾經(jīng)有人說過,真正好的程序是沒有if..else的,當(dāng)然switch還不如if..else。JS規(guī)范里面是禁止使用switch的。
命令對(duì)象(command object)就完美的解決了這個(gè)問題。
引用一篇國外的博客提到的:
JavaScript 有著良好的控制流程語句,這些語句往往用花括號(hào)包裹著。不過有個(gè)例外:switch … case 語句。switch … case 的奇怪之處在于你必須在每個(gè) case 末尾加上關(guān)鍵字 break,以防止流程控制權(quán)穿越進(jìn)入下一個(gè) case 語句中。穿越是指讓多條 case 執(zhí)行的手法,當(dāng)未遇見預(yù)期的 break 時(shí),控制權(quán)就自動(dòng)交到下一句 case 手中。然而,就如同分號(hào)與花括號(hào)一樣,你很有可能會(huì)在不經(jīng)意之間忘了寫 break,當(dāng)這發(fā)生時(shí),后期的錯(cuò)誤排查就比較痛苦,因?yàn)檎Z句本身是沒錯(cuò)的。因此,配對(duì)地寫 case … break 是個(gè)好習(xí)慣。
我們通常講,JavaScript 有著優(yōu)雅的對(duì)象字面量與頂級(jí)函數(shù),這些都使得特定的方法查詢變的非常簡單。為方法查詢所創(chuàng)建的對(duì)象,我們稱之為 活動(dòng)對(duì)象(action object) 或 命令對(duì)象(command object),它被運(yùn)用在許多軟件設(shè)計(jì)模式中,包括強(qiáng)大的而有用的命令模式。
實(shí)例:
// switch 方法
function testSwitch(name) {
switch (name) {
case '1':
return 'hack';
break;
case '2':
return 'slash';
break;
case '3':
return 'run';
break;
default:
return false;
break;
}
}
// 使用命令對(duì)象
function testFn(name) {
var names = {
'1': function() {
return 'hack';
},
'2': function() {
return 'slash';
},
'3': function() {
return 'run';
}
};
if (typeof names[name] !== 'function') {
return false;
}
return names[name]();
}
// 測試結(jié)果
var result1 = testSwitch('1');
var result2 = testFn('2');
console.info(result1, result2);
相關(guān)文章
js實(shí)現(xiàn)滑動(dòng)滑塊驗(yàn)證登錄
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滑動(dòng)滑塊驗(yàn)證登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07HTML中的setCapture和releaseCapture使用介紹
setCapture函數(shù)的作用就是將后續(xù)的mouse事件都發(fā)送給這個(gè)對(duì)象,releaseCapture就是將鼠標(biāo)事件還回去,由 document、window、object之類的自行來處理。這樣就保證了在拖動(dòng)的過程中,不會(huì)由于經(jīng)過了其它的元素而受到干擾2012-03-03ECharts調(diào)用接口獲取后端數(shù)據(jù)的四種方法總結(jié)
echarts是我們經(jīng)常用到的數(shù)據(jù)可視化圖形,但是后端反饋給我們的數(shù)據(jù)經(jīng)常是數(shù)組包對(duì)象的集合類型,下面這篇文章主要給大家介紹了關(guān)于ECharts調(diào)用接口獲取后端數(shù)據(jù)的四種方法,需要的朋友可以參考下2022-11-11BootStrap3學(xué)習(xí)筆記(一)之網(wǎng)格系統(tǒng)
本文給大家介紹BootStrap3網(wǎng)格系統(tǒng)的相關(guān)知識(shí),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05如何自己實(shí)現(xiàn)JavaScript的new操作符
new大家肯定都不陌生,單身沒有對(duì)象的時(shí)候就new一個(gè),很方便。那么它在創(chuàng)建實(shí)例的時(shí)候,具體做了哪些操作呢?今天我們就來一起分析一下。2021-04-04uniapp中使用?uni.navigateBack()?返回上級(jí)頁面并傳參的方法
最近遇到這樣的需求在A頁面中通過跳轉(zhuǎn)到B頁面,在B頁面中處理的數(shù)據(jù),需要跳轉(zhuǎn)回A頁面供其使用,本文給大家分享uniapp中使用?uni.navigateBack()?返回上級(jí)頁面并傳參的操作方法,感興趣的朋友一起看看吧2023-10-10讓iframe框架網(wǎng)頁在任何瀏覽器下自動(dòng)伸縮
很多朋友都在使用iframe中遇到過不能自動(dòng)隨頁面伸縮,特別是動(dòng)態(tài)讀取頁面的時(shí)候,會(huì)出現(xiàn)滾動(dòng)條,影響美觀,今天研究一下了,發(fā)現(xiàn)了一個(gè)簡單解決的辦法,可以在IE,F(xiàn)IREFOX,OPERA下使用2006-08-08JavaScript裝飾器的實(shí)現(xiàn)原理詳解
最近在使用TS+Vue的開發(fā)模式,發(fā)現(xiàn)項(xiàng)目中大量使用了裝飾器,看得我手足無措,今天特意研究一下實(shí)現(xiàn)原理,方便自己理解這塊知識(shí)點(diǎn),有需要的小伙伴也可以參考一下2022-10-10js實(shí)現(xiàn)前端圖片上傳即時(shí)預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)前端圖片即時(shí)預(yù)覽功能,本地預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08