<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          簡單復(fù)習(xí)下 JS 可選 (?.)操作符號,原來函數(shù)也可以用可選寫法

          共 3120字,需瀏覽 7分鐘

           ·

          2021-06-24 17:15

          可選的鏈接?.操作符用于使用隱式空檢查訪問嵌套對象屬性。

          概述

          如何使用null (nullundefined)檢查訪問對象的嵌套屬性?假設(shè)我們必須從后臺的接口訪問用戶詳細信息。

          可以使用嵌套的三元運算符 :

          const userName = response ? (response.data ? (response.data.user ? response.data.user.name : null) : null) : null;

          或者使用 if 進行空值檢查:

          let userName = null;
          if(response && response.data && response.data.user){
            userName = response.data.user.name;
          }

          或者更好的方法是使它成為一個單行鏈接的&&條件,像這樣:

          const userName = response && response.data && response.data.user && response.data.user.name;

          上述代碼的共同之處在于,鏈接有時會非常冗長,并且變得更難格式化和閱讀。這就是 ?.操作符被提出來的原因,我們改下 ?. 重構(gòu)上面的代碼:

          const userName = response?.data?.user?.name;

          很 nice 呀。

          語法

          ?. 語法在ES2020 中被引入,用法如下:

          obj.val?.pro  // 如果`val`存在,則返回`obj.val.prop`,否則返回 `undefined`。

          obj.func?.(args) // 如果 obj.func 存在,則返回 `obj.func?.(args)`,否則返回 `undefined`。

          obj.arr?.[index] // 如果 obj.arr 存在,則返回 `obj.arr?.[index]`,否則返回 `undefined`。

          使用?.操作符

          假設(shè)我們有一個 user 對象:

          const user = {
            name: "前端小智",
            age: 21,
            homeaddress: {
              country: "中國"
            },
            hobbies: [{name: "敲代碼"}, {name: "洗碗"}],
            getFirstName: function(){
              return this.name;
            }
          }

          屬性

          訪問存在的屬性:

          console.log(user.homeaddress.country); 
          // 中國

          訪問不存在的屬性:

          console.log(user.officeaddress.country); 
          // throws error "Uncaught TypeError: Cannot read property 'country' of undefined"

          改用 ?. 訪問不存在的屬性:

          console.log(user.officeaddress?.country); 
          // undefined

          方法

          訪問存在的方法:

          console.log(user.getFirstName()); 
          // 前端小智

          訪問不存在的方法:

          console.log(user.getLastName()); 
          // throws error "Uncaught TypeError: user.getLastName is not a function";

          改用 ?. 訪問不存在的方法:

          console.log(user.getLastName?.()); 
          // "undefined"

          數(shù)組

          訪問存在的數(shù)組:

          console.log(user.hobbies[0].name); 
          // "敲代碼"

          訪問不存在的方法:

          console.log(user.hobbies[3].name); 
          // throws error "Uncaught TypeError: Cannot read property 'name' of undefined"

          改用 ?. 訪問不存在的數(shù)組:

          console.log(user.dislikes?.[0]?.name); 
          // "undefined"

          ?? 操作符

          我們知道 ?. 操作符號如果對象不存在,剛返回 undefined,開發(fā)中可能不返回 undefined 而是返回一個默認值,這時我們可以使用雙問題 ?? 操作符。

          有點抽象,直接來一個例子:

          const country = user.officeaddress?.country;
          console.log(country);
          // undefined

          需要返回默認值:

          const country = user.officeaddress?.country ?? "中國";
          console.log(country);
          // 中國

          ~完,我是刷碗智,SPA走起來,下期見!


          作者:Ashish Lahoti  譯者:前端小智  來源:CSS-Tricket
          原文:https://codingncoepts.com/javascript/optional-chaining-opeator-javascript/
          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99视频免费看 | 亚洲综合国产 | 天天干天天干天天天干 | 中文字幕高清无码在线视频 | 日韩AV家庭乱伦 |