这些优化技巧可以避免我们在JS中过多的使用IF语句

最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。

创新互联建站服务项目包括鹰潭网站建设、鹰潭网站制作、鹰潭网页制作以及鹰潭网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,鹰潭网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到鹰潭省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

接下来会介绍6种方式来代替 if 的使用,这样做不是坚决不使用 if 偏执狂,而是换个方式思考我们的编码思路。

1. 三元运算符

(1) 事例1

带有IF的代码:

 
 
 
  1. function saveCustomer(customer) {
  2.   if (isCustomerValid(customer)) {
  3.     database.save(customer)
  4.   } else {
  5.     alert('customer is invalid')
  6.   }
  7. }

重构后代码:

 
 
 
  1. function saveCustomer(customer) {
  2.   return isCustomerValid(customer)
  3.     ? database.save(customer)
  4.     : alert('customer is invalid')

使用 ES6

 
 
 
  1. const saveCustomer = customer =>
  2.    isCustomerValid(customer)?
  3.      database.save(customer) : alert('customer is invalid')    

(2) 事例2

带有IF的代码:

 
 
 
  1.  function customerValidation(customer) {
  2.    if (!customer.email) {
  3.      return error('email is require')
  4.    } else if (!customer.login) {
  5.     return error('login is required')
  6.    } else if (!customer.name) {
  7.      return error('name is required')
  8.    } else {
  9.      return customer
  10.   }
  11. }

重构后代码:

 
 
 
  1. const customercustomerValidation = customer =>
  2.   !customer.email   ? error('email is required')
  3.   : !customer.login ? error('login is required')
  4.   : !customer.name  ? error('name is required')
  5.                     : customer

(3) 事例3

带有IF的代码:

 
 
 
  1.  function getEventTarget(evt) {
  2.      if (!evt) {
  3.          evt = window.event;
  4.      }
  5.      if (!evt) {
  6.          return;
  7.      }
  8.      const target;
  9.      if (evt.target) {
  10.         target = evt.target;
  11.     } else {
  12.         target = evt.srcElement;
  13.     }
  14.     return target;
  15. }

重构后代码:

 
 
 
  1. function getEventTarget(evt) {
  2.   evtevt = evt || window.event;
  3.   return evt && (evt.target || evt.srcElement);
  4. }

2. 短路运算符

(1) 事例1

带有IF的代码:

 
 
 
  1.  const isOnline = true;
  2.  const makeReservation= ()=>{};
  3.  const user = {
  4.      name:'Damian',
  5.      age:32,
  6.      dni:33295000
  7.  };
  8.  
  9.  if (isOnline){
  10.     makeReservation(user);
  11. }

重构后代码:

 
 
 
  1. const isOnline = true;
  2. const makeReservation= ()=>{};
  3. const user = {
  4.     name:'Damian',
  5.     age:32,
  6.     dni:33295000
  7. };
  8. isOnline&&makeReservation(user);

(2) 事例2

带有IF的代码:

 
 
 
  1.  const active = true;
  2.  const loan = {
  3.      uuid:123456,
  4.      ammount:10,
  5.      requestedBy:'rick'
  6.  };
  7.  
  8.  const sendMoney = ()=>{};
  9.  
  10. if (active&&loan){
  11.     sendMoney();
  12. }

重构后代码:

 
 
 
  1. const active = true;
  2. const loan = {
  3.     uuid:123456,
  4.     ammount:10,
  5.     requestedBy:'rick'
  6. };
  7. const sendMoney = ()=>{};
  8. ctive && loan && sendMoney();

3. 函数委托

事例1

带有IF的代码:

 
 
 
  1. function itemDropped(item, location) {
  2.     if (!item) {
  3.         return false;
  4.     } else if (outOfBounds(location) {
  5.         var error = outOfBounds;
  6.         server.notify(item, error);
  7.         items.resetAll();
  8.         return false;
  9.     } else {
  10.        animateCanvas();
  11.        server.notify(item, location);
  12.        return true;
  13.    }

重构后代码:

 
 
 
  1.  function itemDropped(item, location) {
  2.      const dropOut = function() {
  3.          server.notify(item, outOfBounds);
  4.         items.resetAll();
  5.          return false;
  6.      }
  7.      const dropIn = function() {
  8.          server.notify(item, location);
  9.         animateCanvas();
  10.         return true;
  11.     }
  12.     return !!item && (outOfBounds(location) ? dropOut() : dropIn());
  13. }

4. 非分支策略

此技巧尝试避免使用switch语句,相反是用键/值创建一个映射并使用一个函数访问作为参数传递的键的值。

(1) 事例1

带有switch的代码:

 
 
 
  1.  switch(breed){
  2.      case 'border':
  3.        return 'Border Collies are good boys and girls.';
  4.        break;  
  5.      case 'pitbull':
  6.        return 'Pit Bulls are good boys and girls.';
  7.        break;  
  8.      case 'german':
  9.        return 'German Shepherds are good boys and girls.';
  10.       break;
  11.     default:
  12.       return 'Im default'
  13. }

重构后代码:

 
 
 
  1. const dogSwitch = (breed) =>({
  2.   "border": "Border Collies are good boys and girls.",
  3.   "pitbull": "Pit Bulls are good boys and girls.",
  4.   "german": "German Shepherds are good boys and girls.",  
  5. })[breed]||'Im the default';
  6. dogSwitch("border xxx")

5. 作为数据的函数

我们知道在JS中函数是第一个类,所以使用它我们可以把代码分割成一个函数对象。

带有IF的代码:

 
 
 
  1.  const calc = {
  2.      run: function(op, n1, n2) {
  3.          const result;
  4.          if (op == "add") {
  5.              result = n1 + n2;
  6.          } else if (op == "sub" ) {
  7.              result = n1 - n2;
  8.          } else if (op == "mult" ) {
  9.              result = n1 * n2;
  10.         } else if (op == "div" ) {
  11.             result = n1 / n2;
  12.         }
  13.         return result;
  14.     }
  15. }
  16. calc.run("sub", 5, 3); //2

重构后代码:

 
 
 
  1.  const calc = {
  2.      add : function(a,b) {
  3.          return a + b;
  4.      },
  5.      sub : function(a,b) {
  6.          return a - b;
  7.      },
  8.      mult : function(a,b) {
  9.          return a * b;
  10.     },
  11.     div : function(a,b) {
  12.         return a / b;
  13.     },
  14.     run: function(fn, a, b) {
  15.         return fn && fn(a,b);
  16.     }
  17. }
  18. calc.run(calc.mult, 7, 4); //28

6. 多态性

多态性是对象具有多种形式的能力。OOP中多态性最常见的用法是使用父类引用来引用子类对象。

带有IF的代码:

 
 
 
  1.  const bob = {
  2.    name:'Bob',
  3.    salary:1000,
  4.    job_type:'DEVELOPER'
  5.  };
  6.  
  7.  const mary = {
  8.    name:'Mary',
  9.    salary:1000,
  10.   job_type:'QA'
  11. };
  12. const calc = (person) =>{
  13.     if (people.job_type==='DEVELOPER')
  14.         return person.salary+9000*0.10;
  15.     if (people.job_type==='QA')
  16.         return person.salary+1000*0.60;
  17. }
  18. console.log('Salary',calc(bob));
  19. console.log('Salary',calc(mary));

重构后代码:

 
 
 
  1.  const qaSalary  = (base) => base+9000*0.10;
  2.  const devSalary = (base) => base+1000*0.60;
  3.  
  4.  //Add function to the object.
  5.  const bob = {
  6.    name:'Bob',
  7.    salary:1000,
  8.    job_type:'DEVELOPER',
  9.    calc: devSalary
  10. };
  11. const mary = {
  12.   name:'Mary',
  13.   salary:1000,
  14.   job_type:'QA',
  15.   calc: qaSalary
  16. };
  17. console.log('Salary',bob.calc(bob.salary));
  18. console.log('Salary',mary.calc(mary.salary));

分享文章:这些优化技巧可以避免我们在JS中过多的使用IF语句
标题来源:http://www.shufengxianlan.com/qtweb/news49/507649.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联