我們怎樣來提高和最佳化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]();}
各種技巧來自於網上學習和工作積累
最新評論