js 条件语句控制html,如何避免在JS脚本上过多使用 if 语句?(技巧分享)
如何避免在JS脚本上过多使用 if 语句?本篇文章给大家分享一些方法来我们在 JS 中过多的使用 if 语句。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。
接下来会介绍6种方式来代替 if 的使用,这样做不是坚决不使用 if 偏执狂,而是换个方式思考我们的编码思路。
1、三元运算符
我们来谈谈这个 "条件 ? 表达式1 : 表达式2",很简单的。
范例1
带有IF的代码:
function saveCustomer(customer) {
if (isCustomerValid(customer)) {
database.save(customer)
} else {
alert('customer is invalid')
}
}
重构后代码:
function saveCustomer(customer) {
return isCustomerValid(customer)
? database.save(customer)
: alert('customer is invalid')
}
使用 ES6
const saveCustomer = customer =>isCustomerValid(customer)?database.save(customer):alert('customer is invalid')
范例2
带有IF的代码:
function customerValidation(customer) {
if (!customer.email) {
return error('email is require')
} else if (!customer.login) {
return error('login is required')
} else if (!customer.name) {
return error('name is required')
} else {
return customer
}}
重构后代码:
// ES6 style custom formatted ternary magic
const customerValidation = customer =>
!customer.email ? error('email is required')
: !customer.login ? error('login is required')
: !customer.name ? error('name is required')
: customer
范例3
带有IF的代码:
function getEventTarget(evt) {
if (!evt) {
evt = window.event;
}
if (!evt) {
return;
}
const target;
if (evt.target) {
target = evt.target;
} else {
target = evt.srcElement;
}
return target;
}
重构后代码:
function getEventTarget(evt) {
evt = evt || window.event;
return evt && (evt.target || evt.srcElement);
}
2、短路运算符
它是一种使用AND和OR运算符来计算表达式的技术。
https://codeburst.io/javascript-short-circuit-conditionals-bbc13ac3e9ebtrue || true;
// true
true || false;
// true
false || false;
// false
范例1
带有IF的代码:
const isOnline = true;
const makeReservation= ()=>{};
const user = {
name:'Damian',
age:32,
dni:33295000
};
if (isOnline){
makeReservation(user);
}
重构后代码:
const isOnline = true;
const makeReservation= ()=>{};
const user = {
name:'Damian',
age:32,
dni:33295000
};
//Apply the short circuit to avoid the if.
isOnline&&makeReservation(user);
范例2
带有IF的代码:
const active = true;
const loan = {
uuid:123456,
ammount:10,
requestedBy:'rick'
};
const sendMoney = ()=>{};
if (active&&loan){
sendMoney();
}
重构后代码:
const active = true;
const loan = {
uuid:123456,
ammount:10,
requestedBy:'rick'
};
const sendMoney = ()=>{};
//Apply short circuit in this case, the loan is evaluated true because !=undefined
active && loan && sendMoney();
3、函数委托
该技术将短路和分离代码块与函数混合在一起。
范例1
带有IF的代码:
function itemDropped(item, location) {
if (!item) {
return false;
} else if (outOfBounds(location) {
var error = outOfBounds;
server.notify(item, error);
items.resetAll();
return false;
} else {
animateCanvas();
server.notify(item, location);
return true;
}
}
重构后代码:
function itemDropped(item, location) {
const dropOut = function() {
server.notify(item, outOfBounds);
items.resetAll();
return false;
}
const dropIn = function() {
server.notify(item, location);
animateCanvas();
return true;
}
return !!item && (outOfBounds(location) ? dropOut() : dropIn());
}
4、非分支策略
此技巧尝试避免使用switch语句。其思想是用键/值创建一个映射并使用一个函数访问作为参数传递的键的值。
这个想法来自以下链接:https : //medium.com/chrisburgin/rewriting-javascript-replacing-the-switch-statement-cfff707cf045
范例1
带有switch的代码:
switch(breed){
case 'border':
return 'Border Collies are good boys and girls.';
break;
case 'pitbull':
return 'Pit Bulls are good boys and girls.';
break;
case 'german':
return 'German Shepherds are good boys and girls.';
break;
default:
return 'Im default'
}
重构后代码:
const dogSwitch = (breed) =>({
"border": "Border Collies are good boys and girls.",
"pitbull": "Pit Bulls are good boys and girls.",
"german": "German Shepherds are good boys and girls.",
})[breed]||'Im the default';
dogSwitch("border xxx")
5、作为数据的函数
我们知道在JS中函数是第一个类,所以使用它我们可以把代码分割成一个函数对象。
范例1
带有IF的代码:
const calc = {
run: function(op, n1, n2) {
const result;
if (op == "add") {
result = n1 + n2;
} else if (op == "sub" ) {
result = n1 - n2;
} else if (op == "mult" ) {
result = n1 * n2;
} else if (op == "div" ) {
result = n1 / n2;
}
return result;
}
}
calc.run("sub", 5, 3); //2
重构后代码:
const calc = {
add : function(a,b) {
return a + b;
},
sub : function(a,b) {
return a - b;
},
mult : function(a,b) {
return a * b;
},
div : function(a,b) {
return a / b;
},
run: function(fn, a, b) {
return fn && fn(a,b);
}
}
calc.run(calc.mult, 7, 4); //28
6.多态性
多态性是对象具有多种形式的能力。OOP中多态性最常见的用法是使用父类引用来引用子类对象。
范例1
带有IF的代码:
const bob = {
name:'Bob',
salary:1000,
job_type:'DEVELOPER'
};
const mary = {
name:'Mary',
salary:1000,
job_type:'QA'
};
const calc = (person) =>{
if (people.job_type==='DEVELOPER')
return person.salary+9000*0.10;
if (people.job_type==='QA')
return person.salary+1000*0.60;
}
console.log('Salary',calc(bob));
console.log('Salary',calc(mary));
重构后代码:
//Create function to different behaviour, same parameter call.
const qaSalary = (base) => base+9000*0.10;
const devSalary = (base) => base+1000*0.60;
//Add function to the object.
const bob = {
name:'Bob',
salary:1000,
job_type:'DEVELOPER',
calc: devSalary
};
const mary = {
name:'Mary',
salary:1000,
job_type:'QA',
calc: qaSalary
};
//Same call.
console.log('Salary',bob.calc(bob.salary));
console.log('Salary',mary.calc(mary.salary));
js 条件语句控制html,如何避免在JS脚本上过多使用 if 语句?(技巧分享)相关推荐
- 【 js基础 Day2】js的流程控制:分支语句,循环.顺序结构
复习 JavaScript简称为JS JavaScript是什么? 是一门脚本语言:不需要编译,直接运行 是一门解释性的语言:遇到一样代码就解释一行代码 C#语言是一门面向对象的语言,也是编译语言,是 ...
- 写好 JS 条件语句的 5 条守则
在用 JavaScript 工作时,我们经常和条件语句打交道,这里有5条让你写出更好/干净的条件语句的建议. 1.多重判断时使用 Array.includes 2.更少的嵌套,尽早 return 3. ...
- JS三板斧——流程控制
JS三板斧--流程控制 1.判断语句 前言:在js中判断语句的存在是非常广泛的,我们可以根据判断条件的数目选择合适的判断语句,条件比较少时,使用if/else if/else,条件比较多时用switc ...
- Java-循环语句 控制跳转语句及方法(函数)
流程控制语句之循环语句 什么是循环结构: 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为fa ...
- js检测、控制表单输入必须为中文
js检测.控制表单输入必须为中文 <html> <head> <meta http-equiv="content-Type" content=&quo ...
- js课程 5-14 js如何实现控制动画角色走动
js课程 5-14 js如何实现控制动画角色走动 一.总结 一句话总结:首先是onkeydown事件,然后是改变元素的left和top属性 1.常用键盘事件有哪些? • onkeydown和 onke ...
- php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动
本文主要和大家详解详解原生JS是实现控制多个滚动条同步跟随滚动,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动. 在一些支持用 ...
- php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...
JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换 1. JS的数据类型和访问 1.1. 原始类型JS中的原始数据类型有: number , string , boolean ; 声 ...
- 前端:JS/29/实例:控制div显示_滚动的图片
实例:控制div显示_滚动的图片 <!DOCTYPE html> <html lang="en"><head><meta charset= ...
最新文章
- tornado总结2-静态文件设置
- c#中计算三角形面积公式_看着有点迷的三角形面积计算
- 谷歌地图VS苹果地图:大数据领域竞争
- 零基础 Amazon Web Services (AWS) 入门教程图文版(二)
- Vue (响应式原理-模拟-4-Dep)
- Microsoft Loopback Adapter : Oracle 安装
- Oracle数据库文件中的导入\导出(imp/exp命令)
- nvidia控制面板点了没反应win7_n卡控制面板没有显示选项修复方法_win7系统nvidia控制面板没有显示选项最佳设置...
- NTKO打开服务器上的文件
- JAVA项目管理ppt_【干货】超实用项目管理ppt项目管理ppt
- HDFS- 架构图详细解析
- 使用云函数+云调用,四步实现微信支付
- linux mysql cnf_mysql在linux下查看my.cnf位置的方法
- 浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1
- π型滤波频率计算_滑动平均滤波的截止频率与平均点数计算
- 【信息系统项目管理师学习笔记】10大管理|47个过程组:项目整体管理|制定项目章程
- Go: 模拟一张银行卡存、取、查的功能(综合练习)
- Vue移动端系列 => [06] 文章搜索
- bluedroid acl 发送和接受
- 安卓模拟器打开开发者选项