真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

詳解JavaScript中if/if...else...替換方式

詳解JavaScript 中 if / if...else...替換方式

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出天全免費(fèi)做網(wǎng)站回饋大家。

說(shuō)說(shuō)爛大街的if/if...else...,程序中用得最多的流程判斷語(yǔ)句。

對(duì)著曾經(jīng)滿屏的if/if...else...,心想能不能搞點(diǎn)事情,折騰點(diǎn)浪花浪里呀浪。

對(duì)頂著“這個(gè)需求很簡(jiǎn)單,怎么實(shí)現(xiàn)我不管,明天上線”的程序猿,答案必須YES。

"Write Less, Do More",學(xué)習(xí)進(jìn)步的本質(zhì)就是為了更有效率地偷懶。

廢話說(shuō)完,直接上方法匯總,讓我們來(lái)一窺究竟:

switch改寫(xiě)if

// if 版本
var a = 1;
if(a > 1 && a < 5) {
 return 1
} else if(a > 5 && a < 10){
 return 5
}else{
 return 10
}

// switch 改版
switch(true){
 case (a > 1 && a < 5):
  return 1
 case (a > 5 && a < 10):
  return 5
 default:
  return 10
}

以上代碼的switch...case...的用法實(shí)際使用不多,僅供參考。
 一般case為常量時(shí)switch...case...用得較多。

選擇分支較多時(shí),建議選用switch…case可提高程序的效率,但switch...case不足的地方在于只能處理字符或者數(shù)字類型的變量,if…else更加靈活,可用于判斷表達(dá)式是否成立,比如if(a+b>c),if…else的應(yīng)用范圍更廣。

三元運(yùn)算符改寫(xiě)if

// if 版本
if (bool) {
 value = 1;
} else {
 value = 2;
}

// 三元運(yùn)算符 版本
value = bool ? 1 : 2;
// 三元預(yù)算符 多個(gè)運(yùn)算需要括號(hào)包裹 此處用了逗號(hào)表達(dá)式
return typeof foo === 'object'?(console.log(1),1):(console.log(2),2);

優(yōu)點(diǎn):代碼簡(jiǎn)化,更加清爽,write less

缺點(diǎn):復(fù)雜的三元運(yùn)算符可讀性較差,需友好注釋

TIPS: 三元運(yùn)算符后面不能帶return
// 錯(cuò)誤用法,運(yùn)算符號(hào)后不能帶return
bool ? return 1 : return 2;

邏輯判斷 and(&&)和or(||) 改寫(xiě)if

原理:利用邏輯判斷的短路運(yùn)算來(lái)實(shí)現(xiàn)

短路:&& 中第一個(gè)表達(dá)式為假就不會(huì)去處理第二個(gè)表達(dá)式,|| 則相反

// if為真
if (bool) {
 value = getYes();
}
// &&改版
bool && (value = getYes());

// if為假
if (!bool) {
 value = getNo();
}
bool || (value = getNo());

優(yōu)點(diǎn):代碼簡(jiǎn)化,更加清爽,write less

缺點(diǎn):適用于簡(jiǎn)單判斷邏輯,復(fù)雜的判斷運(yùn)算可讀性較差,需友好注釋

TIPS:適用于沒(méi)有else的場(chǎng)景, 邏輯運(yùn)算符后面不能帶return

// 錯(cuò)誤用法,運(yùn)算符號(hào)后不能帶return
boll || return true;

--------------------------------------------------------------------------------

知識(shí)點(diǎn)插播 —— (1)

1.三元運(yùn)算符和邏輯運(yùn)算符都有一層return作用,但不可作用于函數(shù)return語(yǔ)句,所以像以下這種用法都是錯(cuò)誤的;

// 錯(cuò)誤用法
function getResult(value) {
 value ? 'yes' : 'no';
}
var result = getResult(true); // 并不會(huì)有值返回
1.js邏輯運(yùn)算中,0/""/null/false/undefined/NaN都會(huì)判為false,其它都為true;
2.很多開(kāi)源代碼中可見(jiàn)if(!!attr),為什么不直接寫(xiě)if(attr), 其實(shí)這是一種更嚴(yán)謹(jǐn)?shù)膶?xiě)法,!!attr會(huì)強(qiáng)制轉(zhuǎn)化為boolean類型。typeof !!attr == true 比 typeof attr == true 更加嚴(yán)謹(jǐn)。
--------------------------------------------------------------------------------
對(duì)象屬性
// if版本
if (a == 1) {
 return 'one';
} else if (a == 2) {
 return 'two';
} else if (a == 3) {
 return 'three';
} else {
 return '';
}
// 對(duì)象屬性 改版
var ret = {
 1: 'one',
 2: 'two',
 3: 'three'
};
return ret[a] ? ret[a] : '';
TIPS:

1.判斷值需為確定值,如== ,其它如>=/<=/>/<不適用
2.條件作為對(duì)象屬性,需要注意對(duì)象屬性的讀取方式

--------------------------------------------------------------------------------

知識(shí)點(diǎn)插播 —— (2)

JS的命名規(guī)則(變量的命名規(guī)則)

•標(biāo)識(shí)符只能由字母、數(shù)字、下劃線和‘$'組成
•數(shù)字不可以作為標(biāo)識(shí)符的首字符

對(duì)象屬性的命名規(guī)則

•通過(guò)[]操作符為對(duì)象添加屬性時(shí),屬性名可以是任何字符串(包括只包含空格的字符串和空字符串);
•通過(guò).操作符為對(duì)象添加屬性時(shí),屬性名必須是合法的標(biāo)識(shí)符名稱;
•如果屬性名包含非法的標(biāo)識(shí)符字符,則只能采用obj[“propertyName”]的形式;
•如果屬性名是合法的標(biāo)識(shí)符,讀取時(shí)可采用obj.propertyName或obj[“propertyName”]的形式;

--------------------------------------------------------------------------------

策略模式

策略模式:定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),目的就是將算法的使用與算法的實(shí)現(xiàn)分離開(kāi)來(lái)

以下為常見(jiàn)的表單驗(yàn)證,用策略模式來(lái)構(gòu)建,替換if...else的方式

// html
用戶名: 密碼: 手機(jī)號(hào)碼:
// js // 策略對(duì)象 var strategies = { isNoEmpty: function (value, errorMsg) { if (value === '') { return errorMsg; } }, isNoSpace: function (value, errorMsg) { if (value.trim() === '') { return errorMsg; } }, minLength: function (value, length, errorMsg) { if (value.trim().length < length) { return errorMsg; } }, maxLength: function (value, length, errorMsg) { if (value.length > length) { return errorMsg; } }, isMobile: function (value, errorMsg) { if (!/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|17[7]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(value)) { return errorMsg; } } } // 驗(yàn)證類 var Validator = function() { this.cache = []; } Validator.prototype.add = function(dom, rules) { var self = this; for(var i = 0, rule; rule = rules[i++];) { (function(rule) { var strategyAry = rule.strategy.split(':'); var errorMsg = rule.errorMsg; self.cache.push(function() { var strategy = strategyAry.shift(); strategyAry.unshift(dom.value); strategyAry.push(errorMsg); return strategies[strategy].apply(dom, strategyAry); }) })(rule) } }; Validator.prototype.start = function() { for(var i = 0, validatorFunc; validatorFunc = this.cache[i++];) { var errorMsg = validatorFunc(); if (errorMsg) { return errorMsg; } } }; // 調(diào)用代碼 var registerForm = document.getElementById('registerForm'); var validataFunc = function() { var validator = new Validator(); validator.add(registerForm.userName, [{ strategy: 'isNoEmpty', errorMsg: '用戶名不可為空' }, { strategy: 'isNoSpace', errorMsg: '不允許以空白字符命名' }, { strategy: 'minLength:2', errorMsg: '用戶名長(zhǎng)度不能小于2位' }]); validator.add(registerForm.password, [ { strategy: 'minLength:6', errorMsg: '密碼長(zhǎng)度不能小于6位' }]); validator.add(registerForm.phoneNumber, [{ strategy: 'isMobile', errorMsg: '請(qǐng)輸入正確的手機(jī)號(hào)碼格式' }]); var errorMsg = validator.start(); return errorMsg; } registerForm.onsubmit = function() { var errorMsg = validataFunc(); if (errorMsg) { alert(errorMsg); return false; } }

•第一個(gè)部分是一組策略類,策略類封裝了具體的算法,并負(fù)責(zé)具體的計(jì)算過(guò)程;
•第二個(gè)部分是環(huán)境類Context,該Context接收客戶端的請(qǐng)求,隨后把請(qǐng)求委托給某一個(gè)策略類;

優(yōu)點(diǎn):

1.有效避免多重條件選擇語(yǔ)句
2.提供了對(duì)外開(kāi)放 - 封裝原則的完美支持,將方法封裝在獨(dú)立的strategy中,使得它們易于切換、易于理解、易于擴(kuò)展。
3.復(fù)用性

缺點(diǎn):

1.增加了策略類/對(duì)象的使用
2.使用策略模式,必須先了解所有的strategy,違反了最少知識(shí)原則

總結(jié)

以上所述是小編給大家介紹的JavaScript 中 if / if...else...替換方式 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!


本文名稱:詳解JavaScript中if/if...else...替換方式
網(wǎng)站地址:http://weahome.cn/article/gcoped.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部