久久精品视频只有这里-插入女人小穴视频在线观看-日韩欧美精品在线观看免费-综合亚洲欧美日韩综合久久

你不知道的JSON.stringify()九大特性

2020/11/2 13:49:28   閱讀:2714    發布者:2714


JSON.stringify() 第一大特性總結


undefined、任意的函數以及 symbol 作為對象屬性值時 JSON.stringify() 對跳過(忽略)它們進行序列化undefined、任意的函數以及 symbol 作為數組元素值時,JSON.stringify() 將會將它們序列化為 null
undefined、任意的函數以及 symbol 被 JSON.stringify() 作為單獨的值進行序列化時,都會返回 undefined


JSON.stringify() 第二大特性


非數組對象的屬性不能保證以特定的順序出現在序列化后的字符串中。

正如我們在第一特性所說,JSON.stringify() 序列化時會忽略一些特殊的值,所以不能保證序列化后的字符串還是以特定的順序出現(數組除外)。

JSON.stringify() 第三大特性


轉換值如果有 toJSON() 函數,該函數返回什么值,序列化結果就是什么值,并且忽略其他屬性的值。
JSON.stringify()第四大特性
JSON.stringify() 將會正常序列化 Date 的值。
實際上 Date 對象自己部署了 toJSON() 方法(同Date.toISOString()),因此 Date 對象會被當做字符串處理。

JSON.stringify() 第五大特性


NaN 和 Infinity 格式的數值及 null 都會被當做 null。


JSON.stringify() 第六大特性


布爾值、數字、字符串的包裝對象在序列化過程中會自動轉換成對應的原始值。


JSON.stringify() 第七大特性


其他類型的對象,包括 Map/Set/WeakMap/WeakSet,僅會序列化可枚舉的屬性。JSON.stringify() 不可枚舉的屬性默認會被忽略

JSON.stringify() 第八大特性


我們都知道實現深拷貝最簡單粗暴的方式就是序列化:JSON.parse(JSON.stringify()),這個方式實現深拷貝會因為序列化的諸多特性從而導致諸多的坑點:比如現在我們要說的循環引用問題。

對包含循環引用的對象(對象之間相互引用,形成無限循環)執行此方法,會拋出錯誤。這也就是為什么用序列化去實現深拷貝時,遇到循環引用的對象會拋出錯誤的原因。


JSON.stringify() 第九大特性


所有以 symbol 為屬性鍵的屬性都會被完全忽略掉,即便 replacer 參數中強制指定包含了它們, replacer 是 JSON.stringify() 的第二個參數