当前位置:首页 > 科技  > 软件

JS小知识,使用这六个小技巧,避免过多的使用 IF 语句

来源: 责编: 时间:2024-02-01 12:51:47 293观看
导读这些优化技巧将防止我们在 JavaScript 中过多地使用 IF 语句最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句

dTs28资讯网——每日最新资讯28at.com

这些优化技巧将防止我们在 JavaScript 中过多地使用 IF 语句dTs28资讯网——每日最新资讯28at.com

最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要。dTs28资讯网——每日最新资讯28at.com

接下来我们介绍 6 种使用 if 的方法。这不是抵制使用if的偏执,也不是不让大家以后不要用IF了,而是换一种方式来思考我们的编码思路。dTs28资讯网——每日最新资讯28at.com

1、条件运算符

(1)例子1:

使用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  }}

重构代码:

const customerValidation = customer =>  !customer.email   ? error('email is required')  : !customer.login ? error('login is required')  : !customer.name  ? error('name is required')                    : customer

(2)例子2:

使用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、&&逻辑运算符

(1)例子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};isOnline&&makeReservation(user);

(2)例子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 = ()=>{};active && loan && sendMoney();

3、Function Delegation

使用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、非分支策略

使用Case:

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 中函数是尤其重要,所以使用它,我们也可以将代码拆分成一个函数对象。如下面一个改造示例dTs28资讯网——每日最新资讯28at.com

使用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 中多态性最常见的用法是使用父类引用来引用子类对象。dTs28资讯网——每日最新资讯28at.com

使用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));

重构代码:

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};console.log('Salary',bob.calc(bob.salary));console.log('Salary',mary.calc(mary.salary));

结束

今天的分享就到这里,这6个小技巧,是不是很棒呢,你怎么看呢?dTs28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-70464-0.htmlJS小知识,使用这六个小技巧,避免过多的使用 IF 语句

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 18个JavaScript技巧:编写简洁高效的代码

下一篇: 在 Create React App 中使用 TypeScript,你学会了吗?

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top