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

          JSON.stringify() 的 5 個秘密特性

          共 2424字,需瀏覽 5分鐘

           ·

          2020-07-22 22:15

          JSON.stringify() 方法能將一個 JavaScript 對象或值轉(zhuǎn)換成一個 JSON 字符串。

          aa11298a72121027c21a36b9c2f0aa4e.webp

          原文作者:Prateek Singh? 譯者:zoomdong

          作為一名 JavaScript 開發(fā)人員,JSON.stringify() 是用于調(diào)試的最常見函數(shù)。但是它的作用是什么呢,難道我們不能使用 console.log() 來做同樣的事情嗎?讓我們試一試。

          //初始化一個?user?對象
          const?user?=?{
          ?"name"?:?"Prateek?Singh",
          ?"age"?:?26
          }

          console.log(user);

          //?結(jié)果
          //?[object?Object]

          哦!console.log() 沒有幫助我們打印出期望的結(jié)果。它輸出 [object Object],因為從對象到字符串的默認(rèn)轉(zhuǎn)換是 [object Object]。因此,我們使用 JSON.stringify() 首先將對象轉(zhuǎn)換成字符串,然后在控制臺中打印,如下所示。

          const?user?=?{
          ?"name"?:?"Prateek?Singh",
          ?"age"?:?26
          }

          console.log(JSON.stringify(user));

          //?結(jié)果
          //?"{?"name"?:?"Prateek?Singh",?"age"?:?26?}"

          一般來說,開發(fā)人員使用 stringify 函數(shù)的場景較為普遍,就像我們在上面做的那樣。但我要告訴你一些隱藏的秘密,這些小秘密會讓你開發(fā)起來更加輕松。

          第二個參數(shù)(數(shù)組)

          是的,stringify 函數(shù)也可以有第二個參數(shù)。它是要在控制臺中打印的對象的鍵數(shù)組。看起來很簡單?讓我們更深入一點。我們有一個對象 product 并且我們想知道 product 的 name 屬性值。當(dāng)我們將其打印出來:它會輸出下面的結(jié)果。

          {"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"},{"id":"1003","type":"Blueberry"},{"id":"1004","type":"Devil’s?Food"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5007","type":"Powdered?Sugar"},{"id":"5006","type":"Chocolate?with?Sprinkles"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]}

          在日志中很難找到 name 鍵,因為控制臺上顯示了很多沒用的信息。當(dāng)對象變大時,查找屬性的難度增加。stringify 函數(shù)的第二個參數(shù)這時就有用了。讓我們重寫代碼并查看結(jié)果。

          console.log(JSON.stringify(product,['name'?]);

          //?結(jié)果
          {"name"?:?"Cake"}

          問題解決了,與打印整個 JSON 對象不同,我們可以在第二個參數(shù)中將所需的鍵作為數(shù)組傳遞,從而只打印所需的屬性。

          第二個參數(shù)(函數(shù))

          我們還可以傳入函數(shù)作為第二個參數(shù)。它根據(jù)函數(shù)中寫入的邏輯來計算每個鍵值對。如果返回 undefined,則不會打印鍵值對。請參考示例以獲得更好的理解。

          const?user?=?{
          ?"name"?:?"Prateek?Singh",
          ?"age"?:?26
          }

          d69b41537f1aa13f691f392410d339d3.webp

          //?結(jié)果
          {?"age"?:?26?}

          只有 age 被打印出來,因為函數(shù)判斷 typeOf 為 String 的值返回 undefined。

          第三個參數(shù)為數(shù)字

          第三個參數(shù)控制最后一個字符串的間距。如果參數(shù)是一個數(shù)字,則字符串化中的每個級別都將縮進這個數(shù)量的空格字符。

          //?注意:為了達到理解的目的,使用?'--'?替代了空格

          JSON.stringify(user,?null,?2);
          //{
          //--"name":?"Prateek?Singh",
          //--"age":?26,
          //--"country":?"India"
          //}

          第三個參數(shù)為字符串

          如果第三個參數(shù)是 string,那么將使用它來代替上面顯示的空格字符。

          JSON.stringify(user,?null,'**');
          //{
          //**"name":?"Prateek?Singh",
          //**"age":?26,
          //**"country":?"India"
          //}
          //?這里?*?取代了空格字符

          toJSON 方法

          我們有一個叫 toJSON 的方法,它可以作為任意對象的屬性。JSON.stringify 返回這個函數(shù)的結(jié)果并對其進行序列化,而不是將整個對象轉(zhuǎn)換為字符串。參考下面的例子。

          const?user?=?{
          ?firstName?:?"Prateek",
          ?lastName?:?"Singh",
          ?age?:?26,
          ?toJSON()?{
          ????return?{?
          ??????fullName:?`${this.firstName}?+?${this.lastName}`
          ????};
          ?}
          }

          console.log(JSON.stringify(user));

          //?結(jié)果
          //?"{?"fullName"?:?"Prateek?Singh"}"

          這里我們可以看到,它只打印 toJSON 函數(shù)的結(jié)果,而不是打印整個對象。

          我希望你能學(xué)到 stringify() 的一些基本特征。


          瀏覽 17
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  男人的天堂天天在线视频 | 欧美级一人在线视频播放 | 无码免费在线看 | 久久午夜无码鲁丝片精品 | 大香蕉大香蕉 |