详解JavaScript 中 if / if...else...替换方式
(编辑:jimmy 日期: 2024/11/7 浏览:3 次 )
说说烂大街的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 "htmlcode">上一篇:Bootstrap Table中的多选框删除功能TIPS: 三元运算符后面不能带return // 错误用法,运算符号后不能带return bool "htmlcode">// if为真 if (bool) { value = getYes(); } // &&改版 bool && (value = getYes()); // if为假 if (!bool) { value = getNo(); } bool || (value = getNo());优点:代码简化,更加清爽,write less
缺点:适用于简单判断逻辑,复杂的判断运算可读性较差,需友好注释
TIPS:适用于没有else的场景, 逻辑运算符后面不能带return
// 错误用法,运算符号后不能带return boll || return true;--------------------------------------------------------------------------------
知识点插播 —— (1)
1.三元运算符和逻辑运算符都有一层return作用,但不可作用于函数return语句,所以像以下这种用法都是错误的;
// 错误用法 function getResult(value) { value ""/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] "htmlcode">// 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; } }"color: #ff0000">总结
以上所述是小编给大家介绍的JavaScript 中 if / if...else...替换方式 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
下一篇:简述JS控制台的使用
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。