如何避免在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 语句?(技巧分享)相关推荐

  1. 【 js基础 Day2】js的流程控制:分支语句,循环.顺序结构

    复习 JavaScript简称为JS JavaScript是什么? 是一门脚本语言:不需要编译,直接运行 是一门解释性的语言:遇到一样代码就解释一行代码 C#语言是一门面向对象的语言,也是编译语言,是 ...

  2. 写好 JS 条件语句的 5 条守则

    在用 JavaScript 工作时,我们经常和条件语句打交道,这里有5条让你写出更好/干净的条件语句的建议. 1.多重判断时使用 Array.includes 2.更少的嵌套,尽早 return 3. ...

  3. JS三板斧——流程控制

    JS三板斧--流程控制 1.判断语句 前言:在js中判断语句的存在是非常广泛的,我们可以根据判断条件的数目选择合适的判断语句,条件比较少时,使用if/else if/else,条件比较多时用switc ...

  4. Java-循环语句 控制跳转语句及方法(函数)

    流程控制语句之循环语句 什么是循环结构: 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为fa ...

  5. js检测、控制表单输入必须为中文

    js检测.控制表单输入必须为中文 <html> <head> <meta http-equiv="content-Type" content=&quo ...

  6. js课程 5-14 js如何实现控制动画角色走动

    js课程 5-14 js如何实现控制动画角色走动 一.总结 一句话总结:首先是onkeydown事件,然后是改变元素的left和top属性 1.常用键盘事件有哪些? • onkeydown和 onke ...

  7. php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动

    本文主要和大家详解详解原生JS是实现控制多个滚动条同步跟随滚动,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动. 在一些支持用 ...

  8. php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...

    JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换 1. JS的数据类型和访问 1.1. 原始类型JS中的原始数据类型有: number , string , boolean ; 声 ...

  9. 前端:JS/29/实例:控制div显示_滚动的图片

    实例:控制div显示_滚动的图片 <!DOCTYPE html> <html lang="en"><head><meta charset= ...

最新文章

  1. tornado总结2-静态文件设置
  2. c#中计算三角形面积公式_看着有点迷的三角形面积计算
  3. 谷歌地图VS苹果地图:大数据领域竞争
  4. 零基础 Amazon Web Services (AWS) 入门教程图文版(二)
  5. Vue (响应式原理-模拟-4-Dep)
  6. Microsoft Loopback Adapter : Oracle 安装
  7. Oracle数据库文件中的导入\导出(imp/exp命令)
  8. nvidia控制面板点了没反应win7_n卡控制面板没有显示选项修复方法_win7系统nvidia控制面板没有显示选项最佳设置...
  9. NTKO打开服务器上的文件
  10. JAVA项目管理ppt_【干货】超实用项目管理ppt项目管理ppt
  11. HDFS- 架构图详细解析
  12. 使用云函数+云调用,四步实现微信支付
  13. linux mysql cnf_mysql在linux下查看my.cnf位置的方法
  14. 浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1
  15. π型滤波频率计算_滑动平均滤波的截止频率与平均点数计算
  16. 【信息系统项目管理师学习笔记】10大管理|47个过程组:项目整体管理|制定项目章程
  17. Go: 模拟一张银行卡存、取、查的功能(综合练习)
  18. Vue移动端系列 => [06] 文章搜索
  19. bluedroid acl 发送和接受
  20. 安卓模拟器打开开发者选项

热门文章

  1. Java排序算法:冒泡排序
  2. centos6上以二进制方式安装mariadb5.5
  3. Silverlight开发中遇到的几个小问题
  4. sendmail服务器配置过程中出现的一些错误和解决办法
  5. SuperMap iDesktop Cross 8C 开源桌面GIS下载与扩展开发
  6. vs2010快捷方式
  7. 学习MongoDB (1) :配置安装
  8. Java Robot对象实现服务器屏幕远程监视
  9. 如何禁止NumPy自动跳过数组的中心部分并仅打印角点
  10. 脱离公式谈谈对反向传播算法的理解