亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 13:29:35
字體:
來源:轉載
供稿:網友

說說爛大街的if/if...else...,程序中用得最多的流程判斷語句。

對著曾經滿屏的if/if...else...,心想能不能搞點事情,折騰點浪花浪里呀浪。

對頂著“這個需求很簡單,怎么實現我不管,明天上線”的程序猿,答案必須YES。

"Write Less, Do More",學習進步的本質就是為了更有效率地偷懶。

廢話說完,直接上方法匯總,讓我們來一窺究竟:

switch改寫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...的用法實際使用不多,僅供參考。
 一般case為常量時switch...case...用得較多。

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

三元運算符改寫if

// if 版本if (bool) { value = 1;} else { value = 2;}// 三元運算符 版本value = bool ? 1 : 2;// 三元預算符 多個運算需要括號包裹 此處用了逗號表達式return typeof foo === 'object'?(console.log(1),1):(console.log(2),2);

優點:代碼簡化,更加清爽,write less

缺點:復雜的三元運算符可讀性較差,需友好注釋

TIPS: 三元運算符后面不能帶return// 錯誤用法,運算符號后不能帶returnbool ? return 1 : return 2;

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

原理:利用邏輯判斷的短路運算來實現

短路:&& 中第一個表達式為假就不會去處理第二個表達式,|| 則相反

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

優點:代碼簡化,更加清爽,write less

缺點:適用于簡單判斷邏輯,復雜的判斷運算可讀性較差,需友好注釋

TIPS:適用于沒有else的場景, 邏輯運算符后面不能帶return

// 錯誤用法,運算符號后不能帶returnboll || return true;

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

知識點插播 ―― (1)

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

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

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

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

知識點插播 ―― (2)

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

•標識符只能由字母、數字、下劃線和‘$'組成
•數字不可以作為標識符的首字符

對象屬性的命名規則

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

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

策略模式

策略模式:定義一系列的算法,把它們一個個封裝起來,目的就是將算法的使用與算法的實現分離開來

以下為常見的表單驗證,用策略模式來構建,替換if...else的方式

// html<form id = "registerForm" method="post" action="http://xxxx.com/api/register"> 用戶名:<input type="text" name="userName"> 密碼:<input type="text" name="password"> 手機號碼:<input type="text" name="phoneNumber"> <button type="submit">提交</button></form>// js// 策略對象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;  }     }}// 驗證類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;  } }};// 調用代碼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: '用戶名長度不能小于2位' }]); validator.add(registerForm.password, [ {  strategy: 'minLength:6',  errorMsg: '密碼長度不能小于6位' }]); validator.add(registerForm.phoneNumber, [{  strategy: 'isMobile',  errorMsg: '請輸入正確的手機號碼格式' }]); var errorMsg = validator.start(); return errorMsg;}registerForm.onsubmit = function() { var errorMsg = validataFunc(); if (errorMsg) {  alert(errorMsg);  return false; }}

•第一個部分是一組策略類,策略類封裝了具體的算法,并負責具體的計算過程;
•第二個部分是環境類Context,該Context接收客戶端的請求,隨后把請求委托給某一個策略類;

優點:

1.有效避免多重條件選擇語句
2.提供了對外開放 - 封裝原則的完美支持,將方法封裝在獨立的strategy中,使得它們易于切換、易于理解、易于擴展。
3.復用性

缺點:

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

總結

以上所述是小編給大家介紹的JavaScript 中 if / if...else...替換方式 ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产女人aaa毛片在线| 久久视频精品在线| 日韩免费不卡av| 亚洲男人天堂2019| 色偷偷噜噜噜亚洲男人的天堂| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲高清免费观看高清完整版| 久久久91精品| 亚洲最大在线视频| 久久视频免费在线播放| 国产午夜精品视频| 国产视频亚洲精品| 国产精品一区专区欧美日韩| 欧美精品久久久久久久| 日本一区二区在线免费播放| 欧美性做爰毛片| 欧美大尺度电影在线观看| 精品丝袜一区二区三区| 日韩视频免费在线观看| 欧美日在线观看| 欧美精品videossex88| 亚洲bt欧美bt日本bt| 亚洲午夜久久久久久久| 国模gogo一区二区大胆私拍| 黑人精品xxx一区一二区| 亚洲人成自拍网站| 3344国产精品免费看| 国产这里只有精品| 91精品视频网站| 久久国产精品久久久久久久久久| 欧美精品aaa| 影音先锋欧美精品| 日韩欧美亚洲综合| 日韩高清电影免费观看完整| 国产成人精品免高潮费视频| 亚洲美女视频网| 国产精品96久久久久久| 在线观看亚洲视频| 国产精品久久久久久久美男| 久久久精品欧美| 91九色国产在线| 日本一欧美一欧美一亚洲视频| 国产自摸综合网| 亚洲人成电影在线播放| 成人欧美一区二区三区在线湿哒哒| 91精品国产91久久| 亚洲影院在线看| 中文字幕少妇一区二区三区| 日韩高清电影免费观看完整版| 亚洲国产日韩欧美综合久久| 亚洲乱码国产乱码精品精天堂| 中文字幕精品www乱入免费视频| 国产免费一区二区三区在线观看| 亚洲国产精品嫩草影院久久| 亚洲一区二区免费在线| 亚洲黄色av女优在线观看| 久久激情五月丁香伊人| 精品久久香蕉国产线看观看gif| 日韩av电影手机在线观看| 国产精品视频最多的网站| 日韩成人av在线| 日韩中文字幕精品视频| 最近2019中文字幕一页二页| 一区二区三区高清国产| 中文字幕少妇一区二区三区| 亚洲精品日韩激情在线电影| 欧美日韩国产综合新一区| 国产999视频| 国产精品入口日韩视频大尺度| 亚洲欧美激情另类校园| 日本中文字幕不卡免费| 久久91亚洲精品中文字幕奶水| 最近免费中文字幕视频2019| 深夜精品寂寞黄网站在线观看| 欧美亚洲伦理www| 成人精品视频99在线观看免费| 国语自产精品视频在线看抢先版图片| 国产不卡在线观看| 在线观看久久av| 国产精品wwww| 久久成人一区二区| 性色av一区二区三区红粉影视| xvideos成人免费中文版| 98精品国产高清在线xxxx天堂| 亚洲影院色无极综合| 国产女精品视频网站免费| 成人h猎奇视频网站| 亚洲xxxxx性| 亚洲国产婷婷香蕉久久久久久| 欧美一区二区三区艳史| 久久激情视频免费观看| 91免费电影网站| 日韩精品免费在线观看| 中文字幕在线亚洲| 国产精品v日韩精品| 国产中文字幕亚洲| 俺去啦;欧美日韩| 国产精品黄色影片导航在线观看| 国产一区二区色| 欧美性videos高清精品| 亚洲自拍欧美另类| 欧美国产在线视频| 91亚洲精品久久久久久久久久久久| 国产精品久久视频| 久久亚洲精品中文字幕冲田杏梨| 97精品视频在线播放| 2019中文字幕全在线观看| 亚洲高清福利视频| 在线观看日韩专区| 精品成人乱色一区二区| 久久久国产一区二区| 美女视频久久黄| 亚洲网站在线看| 成人国内精品久久久久一区| www.亚洲天堂| 久久精品中文字幕电影| 欧美整片在线观看| 日韩av网站电影| 97在线日本国产| 欧美激情精品久久久久久大尺度| 亚洲老头同性xxxxx| 亚洲激情免费观看| 国产99久久精品一区二区| 国产精品黄色av| 国内精品视频在线| 亚洲综合视频1区| 疯狂做受xxxx高潮欧美日本| 国产精品高潮在线| 日韩精品中文字幕在线观看| 欧美视频中文在线看| 日韩视频永久免费观看| 亚洲在线视频观看| 精品国产成人在线| 91在线|亚洲| 精品久久久久久亚洲国产300| 国产精品天天狠天天看| 97视频免费观看| 精品久久香蕉国产线看观看gif| 成人性生交大片免费看小说| 午夜精品久久久久久久99黑人| 国产午夜精品美女视频明星a级| 久久精品中文字幕电影| 精品亚洲国产成av人片传媒| 成人av番号网| 日韩欧美成人网| 亚洲影院色无极综合| 亚洲欧美在线一区二区| 欧美日韩激情视频8区| 成人精品一区二区三区电影黑人| 久久久亚洲影院你懂的| 清纯唯美亚洲激情| 亚洲精品免费一区二区三区| 日韩高清有码在线| 亚洲男人的天堂在线播放| 亚洲欧美视频在线| 久久99精品视频一区97| 亚洲电影中文字幕| 亚洲v日韩v综合v精品v| 国产一区二区精品丝袜| 日本不卡免费高清视频| 7m精品福利视频导航| 久久资源免费视频| 久久久91精品国产一区不卡| 一个人看的www久久|