精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

网站一区二区| 99在线视频观看| 狂野欧美一区| 色妞久久福利网| 国产不卡的av| 精品久久久99| 欧美偷拍第一页| 豆花视频一区二区| 色av一区二区| 欧洲美女和动交zoz0z| 性欧美videos另类hd| 夜夜嗨av一区二区三区网站四季av| 日韩av在线电影网| 亚洲狼人综合干| bt在线麻豆视频| 成人一道本在线| 国产成人综合一区二区三区| 登山的目的在线| 国产香蕉精品| 欧美日韩日日摸| 久久99久久99精品| 天堂地址在线www| 成人动漫在线一区| 91精品视频在线看| 日韩在线播放中文字幕| 欧美黄色一区二区| 国产亚洲人成a一在线v站| 中文字幕一区二区三区人妻在线视频 | 国产一区福利视频| 中文在线免费观看| 亚洲欧美日韩国产一区二区| 欧美超级乱淫片喷水| 在线免费看黄视频| 国内毛片久久| 日韩一级视频免费观看在线| 亚洲少妇第一页| 欧美大胆a人体大胆做受| 亚洲欧美日韩人成在线播放| 欧美一区二区在线| 欧美视频在线观看一区二区三区| 久久精品99国产国产精| 琪琪亚洲精品午夜在线| 欧美久久久久久久久久久久| 欧美久久精品一级c片| 福利一区福利二区微拍刺激| 91精品一区二区三区四区| 国产主播福利在线| 91在线免费播放| 97在线资源站| 亚洲视频在线免费播放| 亚洲影视在线| 欧美成人国产va精品日本一级| 亚洲精品乱码久久久久久不卡| 亚洲三级在线| 色婷婷久久久久swag精品| 拔插拔插海外华人免费| 二区三区在线观看| 国产精品色哟哟| 欧美午夜视频在线| 四虎在线视频免费观看| 韩国三级在线一区| 国产精品三级在线| 国产日韩在线免费观看| 99国内精品| 欧美精品电影免费在线观看| 91杏吧porn蝌蚪| 久久视频精品| 中文亚洲视频在线| 欧美做受高潮6| 九一精品国产| 日韩免费视频一区二区| 亚洲精品鲁一鲁一区二区三区| 四虎影视精品永久在线观看| 欧美在线一二三| 日本精品久久久久中文字幕| 国产精品蜜芽在线观看| 亚洲福利视频一区二区| 欧美日韩激情四射| 18videosex性欧美麻豆| 亚洲视频1区2区| 伊人久久大香线蕉综合75| 成人影视在线播放| 亚洲国产精品v| 日韩精品久久一区二区三区| 日韩av成人| 久久久精品tv| 日韩精品一区二区三区丰满| 精品成人一区二区三区免费视频| 久久久久久久久久看片| 日本不卡一二三区| yw193.com尤物在线| 国产欧美日韩一区二区三区在线观看| 日本精品一区二区| 一级毛片视频在线观看| 国产精品久久久久久久久搜平片| 在线视频精品一区| 在线观看麻豆| 18欧美乱大交hd1984| 中文字幕乱码免费| av有码在线观看| 欧美性xxxx极品高清hd直播| 日韩无套无码精品| 欧美黄页免费| 日韩欧美国产1| 国产精品伦子伦| 精品国产一区二区三区小蝌蚪| 中文亚洲视频在线| 久久久久免费看| 视频一区二区三区入口| 成人羞羞国产免费| 日本精品一二区| 欧美激情一区二区三区四区| 国产奶头好大揉着好爽视频| 波多野结衣中文字幕久久| 韩日精品一区二区| 2021国产精品久久精品| 亚洲欧洲日韩综合二区| 黄色影院在线看| 日本道免费精品一区二区三区| 国产又黄又猛又粗又爽的视频| 国产精品国产亚洲精品| 亚洲精品二三区| 精品在线观看一区| 99精品欧美| 国产精品美女在线| 成人小说亚洲一区二区三区| 久久婷婷国产综合国色天香 | 日韩中文字幕三区| 外国成人毛片| 亚洲美女视频网站| 国产va在线播放| 日韩成人精品在线观看| 成人片在线免费看| 午夜视频在线免费观看| 亚洲黄网站在线观看| 黄色片一级视频| aiai久久| 色噜噜狠狠狠综合曰曰曰| 成年人免费看毛片| 国产在线视视频有精品| 久久精品综合一区| av在线麻豆| 欧美中文字幕不卡| 爱爱免费小视频| 韩国av一区| 国产日本欧美一区二区三区在线| 国精品人妻无码一区二区三区喝尿| 国产日韩精品一区二区三区 | 激情懂色av一区av二区av| 91欧美视频在线| 一本色道久久综合亚洲精品酒店| 欧美人与性动交a欧美精品| 国产99久久久久久免费看| av电影在线观看一区| 中国女人做爰视频| 欧美在线一级| 一区二区在线视频播放| 久久久黄色大片| av激情综合网| 婷婷无套内射影院| 激情深爱综合网| 免费在线看黄色| 欧美一区二区三区色| 日本成人精品视频| 美国欧美日韩国产在线播放| 欧美亚洲免费在线| 黑人精品一区| 亚洲人成网站999久久久综合| 欧美一区二区激情视频| 白白色 亚洲乱淫| 免费特级黄色片| 1204国产成人精品视频| 午夜精品久久久久久久久久久久| 亚洲精品国产一区二| 一区二区三区欧美日| 蜜桃福利午夜精品一区| 久久久久久久久久久妇女| 成人av番号网| av免费在线观| 日韩美女视频在线| 免费日韩在线视频| 9人人澡人人爽人人精品| 免费无遮挡无码永久视频| 性欧美lx╳lx╳| 情事1991在线| 超碰国产在线观看| 欧美欧美欧美欧美| 国产波霸爆乳一区二区| 丁香六月综合激情| 波多野结衣家庭教师在线| 日韩av影院| 91成人免费观看网站| 天天干天天色天天| 在线观看av一区| 麻豆网址在线观看| 国产二区国产一区在线观看| 精品一区二区三区无码视频| 精品自拍偷拍| 日本亚洲欧洲色α| 午夜伦理在线| 日韩精品一区二区三区蜜臀| www.av视频| 国产亚洲一区二区三区在线观看| 天天夜碰日日摸日日澡性色av| 精品国产不卡| 亚洲一区二区三区乱码aⅴ蜜桃女| 色呦呦在线免费观看| 亚洲第一页在线| 日韩电影在线观看一区二区| 综合久久一区二区三区| 漂亮人妻被黑人久久精品| 亚洲专区免费| 久久亚洲精品中文字幕冲田杏梨| 丰满爆乳一区二区三区| 思热99re视热频这里只精品| 国产精品久久久久久久久久新婚 | 国产一区二区久久精品| 国产婷婷在线视频| 日韩人在线观看| 欧美日韩生活片| 91蜜桃婷婷狠狠久久综合9色| 免费涩涩18网站入口| 国产一区久久| 午夜久久资源| 久久草在线视频| 国产精品一区二区3区| 午夜dj在线观看高清视频完整版| 日韩av中文字幕在线| 中文字幕人妻丝袜乱一区三区| 一区二区三区日韩精品视频| 成人黄色a级片| 成人免费视频一区二区| 天天操,天天操| 在线亚洲激情| japanese在线播放| 青草国产精品| 国产精品国产亚洲精品看不卡15 | 亚洲丰满少妇videoshd| 国产精品18在线| 久久亚洲私人国产精品va媚药| 日日夜夜精品视频免费观看| 日韩制服丝袜av| 久操网在线观看| 亚洲国产一区二区三区在线播放| 欧美主播一区二区三区美女 久久精品人| 四虎国产精品免费久久| 国产精品美乳在线观看| 亚洲欧洲高清| 国语自产在线不卡| 69xxx在线| 中文字幕精品视频| 国产一区电影| 日韩精品在线观| 国产高潮流白浆喷水视频| 欧美日本韩国一区| 亚洲天堂网在线观看视频| 色婷婷亚洲一区二区三区| 日韩毛片在线视频| 亚洲风情在线资源站| 久久久久无码国产精品| 亚洲欧美另类久久久精品| 亚洲AV无码成人精品区明星换面 | 国产一级二级三级在线观看| 亚洲国产精品热久久| 九9re精品视频在线观看re6| 黄色片网站在线观看| 在线日韩欧美视频| 高清国产福利在线观看| 国产亚洲欧洲高清| 国产九色在线| 中文字幕久久久| 日本福利午夜视频在线| 一级做a爰片久久毛片美女图片| 奇米影视888狠狠狠777不卡| 日韩精品中文在线观看| 四虎精品成人影院观看地址| 日韩av在线导航| 天堂网www中文在线| 亚洲免费人成在线视频观看| 日韩大片b站免费观看直播| 国产视频精品xxxx| 韩国三级av在线免费观看| 亚洲人成五月天| 国产午夜视频在线观看| 中文字幕亚洲无线码a| 日韩精品黄色| 久久91亚洲人成电影网站| 日韩三级影院| 久久久久久久亚洲精品| 华人av在线| 国产精品成人播放| 国产精品日本一区二区不卡视频| 97超碰人人看人人| 另类春色校园亚洲| 久久艹中文字幕| 99免费精品| 男人插女人视频在线观看| 午夜亚洲性色福利视频| 爆乳熟妇一区二区三区霸乳| 精品一区二区三区视频在线观看| wwwxxxx在线观看| heyzo一本久久综合| 亚洲一区二区三区无码久久| 国产午夜三级一区二区三| 精品人体无码一区二区三区| 亚洲欧美偷拍三级| 在线能看的av| 欧美日韩三级一区| 三级视频在线看| 最新日韩中文字幕| 少妇淫片在线影院| 国产日韩欧美91| 欧美激情网址| 亚洲激情啪啪| 18成人免费观看视频| 久草福利视频在线| 成人黄页毛片网站| 综合 欧美 亚洲日本| 一级中文字幕一区二区| 天堂中文在线网| 欧美一区二区三区日韩视频| 天堂成人在线| 美日韩精品免费视频| 涩涩涩在线视频| 亚洲aⅴ男人的天堂在线观看| 欧美成人专区| 国内精品久久影院| 国产aaaaaaaaa| 亚洲色图视频网站| 免费黄色片视频| 日韩欧美国产wwwww| av在线电影网| 欧美亚洲在线视频| 日韩精品视频中文字幕| 日本一区二区精品视频| 国产一区日韩欧美| 一本一道久久a久久综合蜜桃| 久久久五月婷婷| 精品少妇久久久久久888优播| 欧美日韩日日夜夜| 久久99久久| 97精品久久久| 久久久加勒比| 亚洲午夜精品福利| 石原莉奈在线亚洲三区| 麻豆国产精品一区| 亚洲影院理伦片| jizz中国少妇| 在线看日韩av| 欧美123区| 日本在线播放一区| 奶水喷射视频一区| 国产又粗又猛又色| 亚洲高清三级视频| 日本黄色免费视频| 国内精品在线一区| 一区二区三区在线资源| 可以在线看黄的网站| 国产在线视频精品一区| 日本一二三不卡视频| 欧美日韩日日夜夜| 老司机av在线免费看| 国产欧美日韩91| 日韩理论电影| 亚洲va综合va国产va中文| 亚洲男人的天堂在线观看| 国产女人18毛片水真多| www.久久色.com| 日本免费一区二区三区等视频| 日韩中文一区二区三区| 三级欧美在线一区| 久久丫精品忘忧草西安产品| 色综合 综合色| 国产精品久久久久久久龚玥菲| 国产a级全部精品| 国产中文精品久高清在线不| 黄色大片在线免费看| 国产三级精品视频| 一级黄色片网站| 久久天天躁夜夜躁狠狠躁2022| 亚洲色图图片| 国内自拍中文字幕| 国产成人在线网站| 久久久久久不卡| 在线精品播放av| 激情不卡一区二区三区视频在线| 国产精品久久久影院| 成人亚洲一区二区一| 国产精品.www| 亚洲最新av网址| 国产不卡精品| 国产精品久久久久7777| 久久久久99精品一区| 国产成人自拍偷拍| 色综合视频网站| 首页亚洲中字| 一区二区三区 欧美| 亚洲美女免费视频| 免费成人午夜视频| 国产一区二区三区高清播放|