精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Javascript的JSON.stringify()知多少?

開發(fā) 前端
本篇文章就將詳細談談JSON.stringify,并將帶著你進行自己手寫一個JSON.stringify,站在全局考察自己對于各種數(shù)據(jù)類型理解的深度,和各種極端的邊界情況的處理能力。

[[439898]]

1寫在前面

前幾天看到前端胖頭魚的一篇文章《就因為JSON.stringify,我的年終獎差點打水漂了》,講的就是JSON.stringify在工程開發(fā)中的應用,線上用戶不能提交表單。因為字段中經過JSON.stringify后的字符串對象缺少value key,導致后端parse之后無法正確讀取value值,進而報接口系統(tǒng)異常,用戶無法進行下一步動作。本篇文章就將詳細談談JSON.stringify,并將帶著你進行自己手寫一個JSON.stringify,站在全局考察自己對于各種數(shù)據(jù)類型理解的深度,和各種極端的邊界情況的處理能力。

2JSON.stringify()

JSON.stringify是日常開發(fā)中經常用到的JSON對象中的一個方法,用于將一個 JavaScript 對象或值轉換為 JSON 字符串,如果指定了一個 replacer 函數(shù),則可以選擇性地替換值,或者指定的 replacer 是數(shù)組,則可選擇性地僅包含數(shù)組指定的屬性。

簡而言之,就是用于將對象轉換成JSON字符串。

  1. JSON.stringify(value[, replacer [, space]]) 
  • value:必填參數(shù),需要序列化的JSON對象。
  • replacer:可選參數(shù)。
    • 函數(shù)類型:則在序列化過程中,被序列化的值的每個屬性都會經過該函數(shù)的轉換和處理;
    • 數(shù)組類型:則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的 JSON 字符串中;
    • null或未提供:則對象所有的屬性都會被序列化。
  • space:可選參數(shù),用來控制字符串之間的間距。
  • 指定縮進用的空白字符串,用于美化輸出(pretty-print);
  • 數(shù)字類型,它代表有多少的空格;上限為10。小于1,意味著沒有空格;
  • 字符串類型,當字符串長度超過10個字母,取其前10個字母,該字符串將被作為空格;
  • null或未提供,將沒有空格。

注意:

  • 循環(huán)引用的對象(對象之間相互引用,形成無限循環(huán))執(zhí)行此方法,會拋出錯誤。
  • 布爾值、數(shù)字、字符串的包裝對象在序列化過程中會自動轉換成對應的原始值。
  • undefined、任意的函數(shù)以及symbol值,在序列化過程中會被忽略(出現(xiàn)在非數(shù)組對象的屬性值中時)或者被轉換成 null(出現(xiàn)在數(shù)組中時)。函數(shù)、undefined被單獨轉換時,會返回 undefined,如JSON.stringify(function(){}) or JSON.stringify(undefined)。這就是為什么對象中有這些類型的屬性,不能使用JSON.parse(JSON.stringify())來進行深拷貝。
  • Date 日期調用了 toJSON() 將其轉換為了 string 字符串(同Date.toISOString()),因此會被當做字符串處理。
  • NaN 和 Infinity 格式的數(shù)值及 null 都會被當做 null。
  • 其他類型的對象,包括 Map/Set/WeakMap/WeakSet,僅會序列化可枚舉的屬性。
  1. const user = {name:"yichuan",age:18,university:"SCU"}; 
  2. //1.序列化對象 
  3. console.log(JSON.stringify(user));//'{"name":"yichuan","age":18,"university":"SCU"}' 
  4.  
  5. //2.序列化基礎數(shù)據(jù)類型 
  6. console.log(JSON.stringify("平"));//"平" 
  7. console.log(JSON.stringify(18));//"18" 
  8. console.log(JSON.stringify(true));//"true" 
  9. console.log(JSON.stringify(null));//"null" 
  10. console.log(JSON.stringify(undefined));//undefined 
  11.  
  12. //3.使用replacer函數(shù) 
  13. console.log(JSON.stringify(user,function(key,value){ 
  14.    return typeof value === "number" ? 666 : "sixsixsix"
  15. }));//'{name:"sixsixsix",age:666,university:"sixsixsix"}' 
  16.  
  17. //4.指定數(shù)組 
  18. console.log(JSON.stringify(user,["name"]));//'{"name":"yichuan"}' 
  19.  
  20. //5.指定字符串間的間距 
  21. console.log(JSON.stringify(user,null,2)); 
  22. /* 
  23.   "name""yichuan"
  24.   "age": 18, 
  25.   "university""SCU" 
  26. */ 
  27.  
  28. //6.指定字符串的間距”*“ 
  29. console.log(JSON.stringify(user,null,"*****")); 
  30. /* 
  31. *****"name""yichuan"
  32. *****"age": 18, 
  33. *****"university""SCU" 
  34. */ 

整理歸納:

JSON.stringify 輸入 輸出
基礎數(shù)據(jù)類型 string string
  number 字符串類型的字符串
  boolean "true"/"false"
  undefined undefined
  null "null"
  NaN和Infinity "null"
  symbol undefined
  BigInt 報錯
引用數(shù)據(jù)類型 function undefined
  Array數(shù)組中出現(xiàn)了function、undefined、symbol string/"null"

| | | regExp | "{}" | | | Date | Date的toJSON()字符串 | | | 普通object |

  • 如果有toJSON()方法,那么序列化toJSON()的返回值
  • 如果屬性值中出現(xiàn)了function、undefined、symbol則忽略
  • 所有以symbol為屬性鍵的屬性都會被完全忽略掉 |

3手撕JSON.stringify()

其實現(xiàn)場手撕代碼還是有點麻煩的,需要考慮到對各種類型的數(shù)據(jù)進行處理,考慮各種邊界情況。

  1. function stringify(data){ 
  2.  const type = typeof data; 
  3.   //可能為基礎數(shù)據(jù)類型的處理 
  4.   if(type !== "object"){ 
  5.    //判斷是否為NaN或Infinity或者null 
  6.     if(Number.isNaN(data)||data===Infinity){ 
  7.      return "null"
  8.     } 
  9.     //判斷可能為function、undefined、symbol類型 
  10.     if(type === "function" || type === "undefined" || type === "symbol" ){ 
  11.      return undefined 
  12.     } 
  13.     //判斷字符串或數(shù)值的處理 
  14.     if(type === "string" || type === "number"){ 
  15.      return `"${data}"
  16.     } 
  17.     if (typeof data === 'bigint') { 
  18.       throw new TypeError('Do not know how to serialize a BigInt'
  19.     } 
  20.     if (isCyclic(data)) { 
  21.       throw new TypeError('Converting circular structure to JSON'
  22.     } 
  23.     return String(data); 
  24.   }else
  25.    //null 
  26.     if(type==="null"){ 
  27.      return "null" 
  28.     }else if(data.toJSON && typeof data.toJSON === "function"){ 
  29.       //遞歸 
  30.      return stringify(data.toJSON); 
  31.     }else if(Array.isArray(data)){ 
  32.      const arr = []; 
  33.       //對于數(shù)組類型有很多種情況 
  34.       data.forEach((item,index)=>{ 
  35.        //判斷可能為function、undefined、symbol類型 
  36.         if(type === "function" || type === "undefined" || type === "symbol" ){ 
  37.           arr[index] = "null" 
  38.         }else
  39.           arr[index] = stringify(item); 
  40.         } 
  41.       }); 
  42.       result = `"${arr}"`; 
  43.       return arr.result.replace(/'/g,""); 
  44.     }else
  45.      //普通對象 
  46.       const arr = []; 
  47.       //遍歷對象 
  48.       Object.keys(data).forEach((key)=>{ 
  49.        //key如果是symbol類型,忽略 
  50.         if(data[key]!=="symbol"){ 
  51.           if(typeof data[key]!=="undefined" && typeof data[key]!=="function" && typeof data[key]!=="symbol"){ 
  52.             arr.push(`"${key}":stringify(data[key])`); 
  53.           } 
  54.         } 
  55.          
  56.       }) 
  57.       return `{${arr}}`.replace(/'/g, '"') 
  58.     } 
  59.   } 

4參考文章

《MDN:JSON.stringify()》

《就因為JSON.stringify,我的年終獎差點打水漂了》

5寫在最后

 

我們平時開發(fā)中將JSON.stringify應用最多的可能就是淺層的對象進行深拷貝,也就是進行序列化處理。但是當我們進行手撕代碼的時候,需要考慮各種邊界情況,這對于我們來說就比較麻煩,作為面試也是對數(shù)據(jù)類型的全面考察。

 

責任編輯:武曉燕 來源: 前端萬有引力
相關推薦

2021-05-06 05:30:33

JSONstringify()parse()

2019-06-11 15:25:03

JSON性能前端

2022-12-05 14:50:53

2020-03-29 20:16:09

JavaScript前端技術

2020-05-25 14:37:31

JSON.string前端秘密特性

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2024-09-30 11:08:18

JSON局限性數(shù)據(jù)

2022-08-31 22:50:13

JavaScript函數(shù)JSON

2021-12-04 11:17:32

Javascript繼承編程

2021-12-10 07:47:30

Javascript異步編程

2024-03-25 00:10:00

JSON后端開發(fā)

2025-08-25 09:36:06

2021-12-03 15:24:45

Javascript數(shù)據(jù)類型

2021-12-05 08:27:56

Javascript 高階函數(shù)前端

2021-12-07 08:01:33

Javascript 垃圾回收機制前端

2025-04-21 10:43:21

2021-12-06 07:15:48

Javascript作用域閉包

2024-08-06 10:07:15

2012-02-13 22:50:59

集群高可用

2022-05-08 18:02:11

tunnel隧道云原生
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩在线视频| 中国老熟女重囗味hdxx| 在线观看国产免费视频| 在线免费黄色| 免费av一区二区三区四区| 亚洲同性同志一二三专区| 国产精品成人免费电影| 免费欧美一级视频| 亚洲产国偷v产偷v自拍涩爱| 日韩电影二区| 色国产综合视频| 精品一区二区三区自拍图片区| 91插插插插插插| 99综合久久| 18欧美亚洲精品| 国产免费久久av| 91成人精品一区二区| 桃色一区二区| 欧美激情资源网| 粉嫩高清一区二区三区精品视频| 老女人性淫交视频| 亚洲精品aⅴ| 亚洲一二三区不卡| 精品一区二区国产| 国产口爆吞精一区二区| 亚洲老妇激情| 亚洲成人xxx| 日韩激情免费视频| 免费在线看电影| 不卡视频免费播放| 青青在线视频一区二区三区| 日本xxx在线播放| 成人福利av| 亚洲国产成人私人影院tom| 国产精品一区二区3区| 日韩精品在线免费看| 欧美三级自拍| 欧美中文字幕一二三区视频| 亚洲欧洲精品一区| 国产黄色小视频在线观看| 国产综合网站| 亚洲欧美在线x视频| 日韩极品视频在线观看| 四虎影视2018在线播放alocalhost| 亚洲欧美日韩国产| 亚洲欧洲日产国产网站| 成人一区二区三区仙踪林| 91在线三级| 日本一二三不卡| 日韩成人av网站| 国产ts人妖调教重口男| 精品一区二区三区在线观看国产| 欧美疯狂性受xxxxx另类| 欧美一级片黄色| 成人做爰视频www| 1000部国产精品成人观看| 日韩亚洲视频在线| 都市激情在线视频| 成人三级伦理片| 国产精品毛片a∨一区二区三区|国| 国模无码国产精品视频| 亚洲91久久| 精品亚洲永久免费精品| 91亚洲精品久久久蜜桃借种| 久久久久黄久久免费漫画| 一区二区视频在线看| 久久久久久久久一区| 88av在线视频| 香蕉久久国产| 日韩av毛片网| 国产精品19乱码一区二区三区| 国产精品欧美在线观看| 欧美videos中文字幕| www.色就是色| 成人ssswww在线播放| 久久综合久久综合亚洲| 26uuu国产日韩综合| 一区二区三区四区中文字幕| 亚洲一区二区三区精品视频| 亚洲国产成人精品一区二区三区| 精品一区二区三区在线观看国产| 亚洲专区中文字幕| 成人激情直播| 国产免费av一区| 在线成人直播| 国内精品一区二区三区| 小早川怜子一区二区的演员表| 亚洲动漫精品| 亚洲国产成人精品一区二区| 小毛片在线观看| 激情五月综合网| 久久久精品影院| 国产传媒在线看| 国内视频精品| 国产精品久久久久不卡| www.国产.com| 国产乱人伦精品一区二区在线观看 | 青青国产在线视频| 国产午夜久久| 欧美激情va永久在线播放| 国产 日韩 欧美 在线| 国模吧视频一区| 国产成人激情小视频| 可以在线观看av的网站| 免费不卡在线观看| 国产精品麻豆va在线播放| 精品久久国产视频| 国产亚洲一区二区三区在线观看 | 天天久久夜夜| 精品日韩欧美在线| 懂色av蜜桃av| 最新亚洲一区| 午夜精品久久久久久久久久久久久 | 密臀av一区二区三区| 青青青免费在线视频| 亚洲综合图片区| 日韩国产小视频| jizz久久久久久| 欧美日韩国产影片| 日韩精品视频一二三| 成人午夜一级| 国产婷婷97碰碰久久人人蜜臀 | 91精品综合久久久久久五月天| 在线播放一级片| 久草这里只有精品视频| 欧美日韩成人一区二区三区| 日韩av免费观影| 久久久久久久久久久久久久久99| 精品日产一区2区三区黄免费| 黄色av网站在线播放| 亚洲另类春色国产| 日韩精品综合在线| 欧美调教sm| 欧美精品一区二区三区蜜桃视频 | 国产免费一区二区三区免费视频| 国产在线观看一区二区| 成人xxxxx色| 国产激情在线观看| 亚洲第一综合色| 欧洲av无码放荡人妇网站| 主播大秀视频在线观看一区二区| 亚洲精品电影网站| 18精品爽国产三级网站| 牛夜精品久久久久久久99黑人| 久久久久在线观看| www.好吊色| 一区二区三区日韩欧美精品| 在线免费看v片| 欧美wwwwww| 97免费视频在线播放| 天天操天天干天天操| 国产精品日韩成人| 国产高清不卡无码视频| 精品极品在线| 日韩电影中文字幕一区| 国产一二三四视频| 久久精品国产久精国产爱| 国产精品视频免费一区| 999国产在线视频| 欧美亚洲综合久久| 成年女人免费视频| 久久综合电影| 国产91精品不卡视频| 国产精品热久久| 亚洲视频一区二区在线观看| 手机精品视频在线| 国内成人在线| 久久综合入口| 免费网站在线观看人| 精品欧美黑人一区二区三区| 国产污视频在线观看| av午夜精品一区二区三区| 一区二区三区观看| 精品国产亚洲一区二区三区在线| 亚洲欧美一区二区激情| 波多野结衣电影在线播放| 国产精品毛片久久久久久久| 一级黄色在线播放| 久久成人av| 国产免费一区二区三区在线能观看| 欧美日韩xx| 欧美午夜精品一区二区蜜桃| 国产精品69久久久久孕妇欧美| 亚洲永久免费| 亚洲一区二区三区精品在线观看| 激情不卡一区二区三区视频在线| 久久久久久久色| 精品毛片一区二区三区| 亚洲大片免费看| 欧美黄色一级生活片| 亚洲在线免费| 中文字幕一区二区中文字幕| 色香欲www7777综合网| 日韩成人小视频| 亚洲一区 中文字幕| 一区二区三区四区在线| 西西444www无码大胆| 国产一区二区在线影院| 激情网站五月天| 亚洲传媒在线| 99国产在线视频| 国产一区二区主播在线| 欧美久久精品一级黑人c片| 国产一级淫片a视频免费观看| 成人国产在线观看| 午夜剧场高清版免费观看| 亚洲激情欧美| 国产盗摄视频在线观看| 亚洲伦理久久| 欧美性一区二区三区| 中文av资源在线| 欧美成人伊人久久综合网| 欧美卡一卡二卡三| 国产色综合久久| 亚洲精品第二页| av不卡在线看| 免费在线一区二区| 国产精品成人3p一区二区三区| 久久久999成人| 九九热视频在线观看| 欧美在线你懂得| 日本三级一区二区| 亚洲综合网站在线观看| 亚洲 欧美 变态 另类 综合| 国产裸体歌舞团一区二区| 日本熟妇人妻xxxxx| 在线高清一区| 热re99久久精品国产99热| 姬川优奈av一区二区在线电影| 欧美激情欧美狂野欧美精品| 黄色网址在线免费播放| 在线观看中文字幕亚洲| 国产精品一区二区三区在线免费观看 | 亚洲欧洲午夜一线一品| 人妻精品无码一区二区| 欧美日韩亚洲一区二区| 乐播av一区二区三区| 99精品国产热久久91蜜凸| 成人一区二区三| 久久综合中文| 超碰在线免费97| 99久久精品费精品国产风间由美| 国产欧美日韩精品在线观看| 国产日本在线| 亚洲精品久久久久久下一站| www.黄色片| 精品久久久久久久人人人人传媒| 精品二区在线观看| 日韩欧美二区三区| 亚洲黄色在线播放| 欧美精品一区二| 同心难改在线观看| 亚洲欧洲激情在线| 一本一道波多野毛片中文在线| 91精品国产美女浴室洗澡无遮挡| 久久精品无码人妻| 亚洲不卡av一区二区三区| 夫妇交换中文字幕| 中文无字幕一区二区三区| 亚洲欧美综合7777色婷婷| 中文字幕亚洲一区二区va在线| 好男人香蕉影院| 久久这里只有精品6| 欧美多人猛交狂配| 国产成人一区二区精品非洲| 男人操女人免费| 视频一区二区三区在线| 久久99爱视频| 国产成人一区在线| 亚洲欧美色图视频| 国产成a人无v码亚洲福利| 久久精品影视大全| 国产日韩综合| 国产一级不卡毛片| 精品一区在线看| 老熟女高潮一区二区三区| 99精品国产99久久久久久白柏| 免费网站在线高清观看| 99久久免费视频.com| 蜜桃传媒一区二区亚洲av| 亚洲国产高清不卡| 久久久精品人妻一区二区三区四 | 日本黄网免费一区二区精品| 久久视频精品| 霍思燕三级露全乳照| 欧美日韩少妇| 91制片厂免费观看| 999国产精品| 亚洲熟妇无码一区二区三区| 亚洲综合专区| 黄色免费福利视频| 狠狠综合久久av一区二区老牛| www.com毛片| 韩国av一区二区三区四区| 粉色视频免费看| 99国产精品国产精品久久| 99成人在线观看| 欧美丝袜一区二区三区| 毛片视频网站在线观看| 欧美精品色综合| 国产精品无码在线播放| 日韩电影中文字幕av| 伦xxxx在线| 国产v综合ⅴ日韩v欧美大片| 成人黄色91| 日韩.欧美.亚洲| 亚洲美女少妇无套啪啪呻吟| 亚洲娇小娇小娇小| 91视频国产观看| 国产第100页| 欧美一区三区四区| 高清中文字幕一区二区三区| 久久免费视频观看| 国产精品久一| 亚洲一区二区三区精品视频| 国产精品综合色区在线观看| 无码国产精品一区二区免费式直播| 中文字幕不卡三区| 6080午夜伦理| 亚洲精品电影在线观看| 欧美伦理免费在线| 91理论片午午论夜理片久久| 中国av一区| 黄色一级在线视频| 懂色av一区二区三区蜜臀| 欧美大片xxxx| 欧美美女一区二区在线观看| 国内精品一区视频| 2019中文字幕全在线观看| 成人av综合网| 日韩欧美第二区在线观看| 亚洲黄色av| 精品人妻一区二区免费| 亚洲最新在线观看| 精品欧美一区二区精品少妇| 精品国产一区二区在线| 伊人精品影院| 91亚洲国产成人精品性色| 色999日韩| 中文字幕在线观看日| 国产精品的网站| 一级黄色片在线观看| 日韩性生活视频| 国产精品中文| 福利在线小视频| 日韩精品1区2区3区| 中文字幕第六页| 亚洲蜜臀av乱码久久精品| 国产女人高潮毛片| 欧美乱妇40p| 成人h动漫精品一区二区器材| a级黄色小视频| 91啪亚洲精品| 亚洲图片欧美日韩| 中文字幕av一区二区三区谷原希美| 最新超碰在线| 国产伦精品一区二区三区免| 黄色成人在线网站| 精品黑人一区二区三区观看时间| 欧美视频免费在线| eeuss影院www在线播放| 国内精品久久久久影院 日本资源| 哺乳一区二区三区中文视频 | 久色婷婷小香蕉久久| 欧美一级特黄高清视频| 日韩欧美一级片| 亚洲天堂免费电影| av资源站久久亚洲| 亚洲黄色一区| 亚洲AV无码国产成人久久| 欧美视频精品在线观看| 午夜av免费在线观看| 九九热精品视频国产| 欧美1区二区| av网站在线不卡| 一级精品视频在线观看宜春院 | 99国产精品久久久久久久久久久| 日韩在线 中文字幕| x99av成人免费| 美女一区2区| 国产精品无码电影在线观看| 成人白浆超碰人人人人| 夜夜躁日日躁狠狠久久av| 久热精品在线视频| 日韩精品第二页| 四虎永久国产精品| 久久久久欧美精品| 欲求不满的岳中文字幕| 欧美在线不卡视频| 青春草在线免费视频| 日本精品免费| 高清久久久久久| 欧美高清69hd| 韩剧1988免费观看全集| 日韩久久视频| 中文乱码人妻一区二区三区视频| 欧美日韩黄视频| 午夜影视一区二区三区| 亚洲黄色网址在线观看| 国产亚洲欧美在线|