首頁>技術>

我們怎樣來提高和最佳化javascript裡巢狀的if語句呢?

if (color) {  if (color === 'black') {    printBlackBackground();  } else if (color === 'red') {    printRedBackground();  } else if (color === 'blue') {    printBlueBackground();  } else if (color === 'green') {    printGreenBackground();  } else {    printYellowBackground();  }}

一種方法來提高巢狀的if語句是使用switch語句。雖然它不那麼囉嗦而且排列整齊,但是並不建議使用它,因為這對於除錯錯誤很困難。

switch(color) {  case 'black':    printBlackBackground();    break;  case 'red':    printRedBackground();    break;  case 'blue':    printBlueBackground();    break;  case 'green':    printGreenBackground();    break;  default:    printYellowBackground();}

如果可以重構的話,我們可以試著簡化函式。比如不需要為每個顏色寫一個函式,而是將顏色作為函式的引數。

function printBackground(color) {  if (!color || typeof color !== 'string') {    return; // Invalid color, return immediately  }}

但是如果不能重構的話,我們必須避免過多的條件檢查,避免過多使用switch。我們必須考慮最有效率的方法,使用object。

switch(true) {  case (typeof color === 'string' && color === 'black'):    printBlackBackground();    break;  case (typeof color === 'string' && color === 'red'):    printRedBackground();    break;  case (typeof color === 'string' && color === 'blue'):    printBlueBackground();    break;  case (typeof color === 'string' && color === 'green'):    printGreenBackground();    break;  case (typeof color === 'string' && color === 'yellow'):    printYellowBackground();    break;}

但是我們應該時刻注意避免太多判斷在一個條件裡,儘量少地使用switch,考慮最有效率的方法:藉助object。

var colorObj = {  'black': printBlackBackground,  'red': printRedBackground,  'blue': printBlueBackground,  'green': printGreenBackground,  'yellow': printYellowBackground};if (color in colorObj) {  colorObj[color]();}

各種技巧來自於網上學習和工作積累

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JavaScript 調優:如何處理 bundle 大小