成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這些優化技巧可以避免我們在 JS 中過多的使用 IF 語句

開發 前端
接下來會介紹6種方式來代替 if 的使用,這樣做不是堅決不使用 if 偏執狂,而是換個方式思考我們的編碼思路。

最近在重構代碼時,我發現早期的代碼使用太多的 if 語句,其程度是我從未見過的。這就是為什么我認為分享這些簡單的技巧是非常重要的,這些技巧可以幫助我們避免過多的使用 if 語句。

接下來會介紹6種方式來代替 if 的使用,這樣做不是堅決不使用 if 偏執狂,而是換個方式思考我們的編碼思路。

[[322188]]

1. 三元運算符

(1) 事例1

帶有IF的代碼:

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

重構后代碼:

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

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

重構后代碼:

  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; 

重構后代碼:

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

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

重構后代碼:

  1. const isOnline = true
  2. const makeReservation= ()=>{}; 
  3. const user = { 
  4.     name:'Damian', 
  5.     age:32, 
  6.     dni:33295000 
  7. }; 
  8.  
  9. 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(); 

重構后代碼:

  1. const active = true
  2. const loan = { 
  3.     uuid:123456, 
  4.     ammount:10, 
  5.     requestedBy:'rick' 
  6. }; 
  7.  
  8. const sendMoney = ()=>{}; 
  9.  
  10. 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.  
  8.      const dropIn = function() { 
  9.          server.notify(item, location); 
  10.         animateCanvas(); 
  11.         return true; 
  12.     } 
  13.  
  14.     return !!item && (outOfBounds(location) ? dropOut() : dropIn()); 

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' 

重構后代碼:

  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.  
  7.  
  8. 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.  
  13. const calc = (person) =>
  14.  
  15.     if (people.job_type==='DEVELOPER') 
  16.         return person.salary+9000*0.10; 
  17.  
  18.     if (people.job_type==='QA') 
  19.         return person.salary+1000*0.60; 
  20.  
  21. console.log('Salary',calc(bob)); 
  22. 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.  
  12. const mary = { 
  13.   name:'Mary', 
  14.   salary:1000, 
  15.   job_type:'QA', 
  16.   calc: qaSalary 
  17. }; 
  18.  
  19. console.log('Salary',bob.calc(bob.salary)); 
  20. console.log('Salary',mary.calc(mary.salary)); 

 

責任編輯:趙寧寧 來源: 前端小智
相關推薦

2024-01-30 08:43:26

IF 語句JavaScripJS

2021-07-05 06:51:43

流程代碼結構

2023-02-08 17:00:07

IF 語句技巧代碼

2015-02-11 10:00:15

2020-09-07 11:17:05

云計算

2018-10-14 15:52:46

MySQL數據清理數據庫

2010-09-07 13:50:41

SQL語句

2024-12-05 09:02:00

Pythonif?

2022-05-10 10:39:51

初創企業技術債務

2019-02-12 15:00:32

Javascript命令式編程前端

2017-09-13 08:34:48

2016-03-24 09:53:24

swiftguardios

2020-03-06 10:35:35

數據中心能耗能源

2020-08-12 09:45:23

SQL優化技巧

2022-07-04 08:51:43

條件語句JavaScript

2018-12-24 12:40:03

大數據IT互聯網

2024-10-11 08:46:18

2011-07-11 10:34:40

編程技巧蘋果

2020-08-19 10:11:36

SQLMySQL數據庫

2018-04-10 14:36:18

數據庫MySQL優化技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产色综合久久 | 欧美一级片在线观看 | 久草新视频 | 日本一区二区电影 | 国产剧情一区 | 中文字幕在线精品 | 午夜精品福利视频 | 国产目拍亚洲精品99久久精品 | 国产三级电影网站 | 欧美aaaaaaaaaa| 久久小视频 | 欧美色性 | 久久精品国产一区二区三区 | 在线欧美亚洲 | 性做久久久久久免费观看欧美 | 成人亚洲视频 | 欧美日韩电影一区二区 | 日韩av免费在线电影 | 一区二区三区不卡视频 | 国产日产精品一区二区三区四区 | 高清久久久 | 最新黄色在线观看 | 亚洲精品一| 中文字幕一区二区三区日韩精品 | 国产视频久| 国产a爽一区二区久久久 | 中日韩欧美一级片 | 欧美精品一区二区在线观看 | 欧美网站一区 | 人人爽日日躁夜夜躁尤物 | 免费在线观看黄视频 | 999久久久| 黑人精品欧美一区二区蜜桃 | 精品日韩一区二区 | www.久久 | www.4虎影院 国产999精品久久久影片官网 | 一级黄色短片 | 一区二区福利视频 | 中文字幕在线免费观看 | 欧美日韩久久精品 | 爱操影视 |