JSON.parse(JSON.stringify)深拷貝的問題

  1. 如果obj里面有時(shí)間對(duì)象,則JSON.stringify后再JSON.parse的結(jié)果,時(shí)間將只是字符串的形式,而不是對(duì)象的形式
var t = {time: new Date()};
var t2 = JSON.parse(JSON.stringify(t));
console.log(t,t2)
image.png
  1. 如果obj里有RegExp(正則表達(dá)式的縮寫)、Error對(duì)象,則序列化的結(jié)果將只得到空對(duì)象;
var r = {a: /^name.+/, b:2, c: new Error('錯(cuò)誤'), d: new RegExp('\\w+')};
var r2 = JSON.parse(JSON.stringify(r));
console.log(r, r2)
image.png
  1. 如果obj里有函數(shù),undefined,則序列化的結(jié)果會(huì)把函數(shù)或 undefined丟失;
var q = {fn: function(){}, u: undefined, i: null, g: ''};
var q2 = JSON.parse(JSON.stringify(q));
console.log(q, q2)
image.png
  1. 如果obj里有NaN、Infinity和-Infinity,則序列化的結(jié)果會(huì)變成null
var w = {a: NaN, b: Infinity, c: -Infinity, d: 3};
var w2 = JSON.parse(JSON.stringify(w));
console.log(w, w2)
image.png
  1. JSON.stringify()只能序列化對(duì)象的可枚舉的自有屬性,例如 如果obj中的對(duì)象是有構(gòu)造函數(shù)生成的, 則使用JSON.parse(JSON.stringify(obj))深拷貝后,會(huì)丟棄對(duì)象的constructor;
function Person(name){this.name=name};
Person.prototype.age= 14;
var p = new Person('zs');
var o = {a: p};
var o2 = JSON.parse(JSON.stringify(o));
console.log(o ,o2)
image.png
  1. 如果對(duì)象中存在循環(huán)引用的情況也無法正確實(shí)現(xiàn)深拷貝;
var a = {};a.b=a;
image.png

通俗點(diǎn)說,JSON.parse(JSON.stringfy(X)),其中X只能是Number, String, Boolean, Array, 扁平對(duì)象,即那些能夠被 JSON 直接表示的數(shù)據(jù)結(jié)構(gòu)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容