<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Web前端入門第 59 問:JavaScript 條件語句中善用 return 讓代碼更清晰

      條件語句

      JS 的條件語句不太多,就 ifswitch 兩個,不過他們的使用方式也可以算是眼花繚亂了。

      if 語句

      if 字面意思:如果 xxx。程序中的用法也是這樣,如果條件為真,則執行執行代碼塊,反之則不執行。

      語法:

      if (條件) {
        // 條件為真時執行
      } else if (其他條件) {
        // 前一個條件為假且當前條件為真時執行
      } else if (其他條件) {
        // 前面所有條件為假且當前條件為真時執行
      } else {
        // 所有條件均為假時執行
      }
      

      基礎用法:

      if (true) {
        console.log('條件為真執行代碼塊');
      }
      // 如果代碼塊中只有一個語句,可以省略花括號
      if (true) console.log('條件為真執行代碼塊');
      

      if & else 用法:

      const age = 20;
      if (age < 18) {
        console.log('未成年');
      } else {
        console.log('成年人');
      }
      // 也可省略花括號
      if (age < 18) console.log('未成年');
      else console.log('成年人');
      

      完整示例:

      const age = 20;
      if (age < 18) {
        console.log('未成年');
      } else if (age >= 18 && age < 50) {
        console.log('成年人');
      } else if (age >= 50 && age < 65) {
        console.log('中年人');
      } else {
        console.log('老年人');
      }
      

      雖然 if 條件語句的語法上支持省略花括號,但在實際編碼中,還是不太建議這么做,代碼可讀性降低,導致維護成本增加。

      switch 語句

      switch 語句和 if 語句很像,都用于條件判斷,但 switch 語句中不支持條件表達式,case 后面只能是一個值或者運算表達式。

      使用時特別注意 break 關鍵字,如果少了這個,您的代碼會出大簍子。

      使用 switch 語句:

      const fruit = 'apple';
       
      switch (fruit) {
        case 'apple':
          console.log('蘋果');
          break;
        case 'banana':
          console.log('香蕉');
          break;
        case 'orange':
          console.log('橘子');
          break;
        default:
          console.log('其他水果');
          break;
      }
      

      以下代碼錯誤寫法,將始終都是 default 分支:

      const age = 20;
      switch (age) {
        case age < 18:
          console.log('未成年');
          break;
        case age >= 18 && age < 50:
          console.log('成年人');
          break;
        case age >= 50 && age < 65:
          console.log('中年人');
          break;
        default:
          console.log('老年人');
      }
      

      但可以這樣用:

      const fruit = 'apple';
      const apple = 'apple';
      switch (fruit) {
        case apple: // 可以使用變量
          console.log('蘋果');
          if (true) { // case 中可以使用條件語句
            console.log('進入條件語句');
          }
          break;
        case 'ban' + 'ana': // 可以使用運算符
          console.log('香蕉');
          break;
        default:
          console.log('其他水果');
          break;
      }
      

      使用 switch 語句時,如果少了 break 關鍵字,就觸發了神奇的 case 穿透 問題。看例子:

      const fruit = 'apple';
       
      switch (fruit) {
        case 'apple':
          console.log('蘋果');
          // 沒有 break,代碼會走到下一個 case
        case 'banana':
          console.log('香蕉');
          // 依然沒有 break,繼續往下走
        case 'orange':
          console.log('橘子');
          // 仍然沒有 break,繼續
        default:
          console.log('其他水果');
          // switch 結束了
      }
      

      以上代碼會同時輸出:

      蘋果
      香蕉
      橘子
      其他水果
      

      if 優化

      代碼中免不了會出現很多 if 判斷情況,如果代碼組織能力太差,那就像捅了 if 窩一樣~~

      看一個在曾經項目中前輩寫的代碼:

      if (score.length != 0) {
        if (score >= 0 && score <= 10) {
          if (res1.status === '1') {
            if (res2.status === '1') {}
            if (viewShow) {
            } else {}
          } else {}
        } else {}
      } else {}
      

      這樣的代碼看起來舒服嗎?反正我不舒服,真的太丑了,一層層的嵌套,像是走到邏輯地獄一樣!!

      使用衛語句優化

      善用 return 優化 if 語句,提前處理異常或簡單條件,減少嵌套層級。

      優化前的代碼:

      function checkOrder(order) {
        if (order.isValid) {
          if (order.items.length > 0) {
            if (order.total > 0) {
              // 核心邏輯
              return '1';
            } else {
              return '2';
            }
          } else {
            return '3';
          }
        } else {
          return '4';
        }
      }
      

      衛語句優化后:

      function checkOrder(order) {
        if (!order.isValid) {
          return '4';
        }
        if (order.items.length === 0) {
          return '3';
        }
        if (order.total <= 0) {
          return '2';
        }
        
        return '1';
      }
      

      使用策略模式優化

      策略模式 屬于設計模式中的一種,通往超神路上,設計模式可以算是一道攔路虎,好的設計模式可以寫出更優雅的代碼。

      在 JS 這個語言中,使用對象可以輕松的實現策略模式,優化不必要的 if 語句。

      優化前的代碼:

      function getUserType(type) {
        if (type === 'A') {
          return '前端';
        } else if (type === 'B') {
          return '后端';
        } else if (type === 'C') {
          return '全干';
        } else {
          return '未知';
        }
      }
      

      優化后:

      const userMap = {
        A: '前端',
        B: '后端',
        C: '全干',
        D: '未知',
      };
      
      function getUserType(type) {
        return userMap[type] ?? userMap.default;
      }
      

      使用面向對象設計中的多態

      將不同條件分支封裝到不同類中,善用對象的多態概念,可以優化一部分代碼。

      說實話,JS 的代碼還是不太習慣面向對象風格,還是習慣函數式編程,但這種優化方式還是值得學習的。

      優化前的代碼:

      // 重構前(if-else 判斷角色權限)
      function checkPermission(user) {
        if (user.role === 'admin') {
          return true; // 管理員有用所有操作權限
        } else if (user.role === 'editor') {
          return action === 'edit'; // 網站編輯只有編輯權限
        } else {
          return action === 'view'; // 訪客只有查看權限
        }
      }
      

      優化后:

      // 重構后(多態實現)
      class Admin { // 管理員有用所有操作權限
        can(action) { return true; }
      }
      
      class Editor { // 網站編輯只有編輯權限
        can(action) { return action === 'edit'; }
      }
      
      class Guest { // 訪客只有查看權限
        can(action) { return action === 'view'; }
      }
      
      function checkPermission(user, action) {
        return user.can(action);
      }
      

      使用鏈式判斷

      利用 ES6 現代語法簡化嵌套屬性訪問和條件判斷,ES6 的可選鏈操作符是真的可以省下很多代碼量,再組合使用空值合并,代碼逼格瞬間提升。

      優化前的代碼:

      function getUserCity(user) {
        if (user && user.address && user.address.location) {
          return user.address.location.city;
        }
        return '未知';
      }
      

      優化后:

      // 鏈式判斷 + 空值合并
      function getUserCity(user) {
        return user?.address?.location?.city ?? '未知';
      }
      

      善用單一職責

      將復雜條件拆分為多個獨立函數,每個函數只做一件事,代碼不要寫得太復雜,誰都能看懂的代碼才是好代碼!

      優化前的代碼:

      // 不同的用戶價格計算邏輯
      function calcPrice(user, product) {
        if (user.isVIP) {
          if (product.stock > 0) {
            return product.price * 0.8; // VIP 用戶打8折
          } else {
            throw new Error('缺貨');
          }
        } else {
          if (product.stock > 0) {
            return product.price; // 非 VIP 用戶原價
          } else {
            throw new Error('缺貨');
          }
        }
      }
      

      優化后:

      function isProductAvailable(product) { // 判斷產品是否有庫存
        if (product.stock <= 0) throw new Error('缺貨');
      }
      
      function getVIPDiscount(user) {
        return user.isVIP ? 0.8 : 1; // 判斷用戶是否打折
      }
      
      function calcPrice(user, product) {
        isProductAvailable(product); // 先判斷產品庫存
        return product.price * getVIPDiscount(user); // 計算價格
      }
      

      寫在最后

      代碼誰都能寫,但寫出來的代碼好不好看,能不能維護,這就是考驗技術的時候了。

      總結幾個編碼原則,僅供參考:

      1、單一職責:每個函數/模塊只處理一個邏輯。
      2、早返早拒:優先處理無效條件,減少嵌套。
      3、數據結構化:用對象、Map 或類替代硬編碼條件。
      4、現代語法:善用 ?.、??、||、&& 等簡化代碼。

      posted @ 2025-05-27 14:15  前端路引  閱讀(746)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 强奷白丝美女在线观看| 国产亚洲欧洲av综合一区二区三区| 国产成人一区二区免av| 亚洲精品国自产拍影院| 污污网站18禁在线永久免费观看| 日韩人妻无码一区二区三区| 国产视频最新| 久久人妻精品白浆国产| 国内精品人妻一区二区三区| 无码日韩精品一区二区三区免费| 妖精视频亚州无吗高清版| 亚洲精品日本一区二区| 丁香婷婷色综合激情五月| 99精品国产一区二区三区| 中国女人内谢69xxxx| 99在线精品视频观看免费| 久久96国产精品久久久| 国产精品三级中文字幕| 中文字幕一区二区三区久久蜜桃| 超碰人人超碰人人| 精品乱人码一区二区二区| 欧洲美熟女乱又伦免费视频| 国产精品三级黄色小视频| 凌源市| 国内精品一区二区不卡| 国产日韩久久免费影院| 97精品亚成在人线免视频 | 成人国产精品免费网站| 亚洲高清激情一区二区三区| 久久国产精品免费一区| 久久九九日本韩国精品| 52熟女露脸国语对白视频| 亚洲午夜无码久久久久蜜臀av | 亚洲综合天堂av网站在线观看| 国产91精品调教在线播放| 日本一卡二卡3卡四卡网站精品| 国产中文字幕在线精品| 国产伦精品一区二区三区| 久久99九九精品久久久久蜜桃| 精品粉嫩国产一区二区三区 | 黑人巨茎大战欧美白妇|