天天看點

JSON.parse(JSON.stringify())

也算是剛開始學JS,剛看到這個寫法甚是疑惑,經一位部落客文章點撥醍醐灌頂,感謝網際網路的分享精神。 這涉及到對對象的深拷貝的概念。

讓我們用栗子來簡單明了的看這個問題:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = before;
before.name = "BUNNY";
alert(JSON.stringify(after));
           

沒錯,after的屬性值跟着before一起改變了:

JSON.parse(JSON.stringify())

而使用深拷貝寫法呢:

var before = {"name": "bunny", "age": 18, "boyfriend": "bunnylover"};
var after = JSON.parse(JSON.stringify(before));
before.name = "BUNNY";
alert(JSON.stringify(after));
           

成功保證after不再受before的影響:

JSON.parse(JSON.stringify())

總結: 對象直接拷貝會存在引用對象的指針聯系,而拷貝一個字元串會另外新開辟一個位址,于是我們不拷貝對象,而是把資料先轉為字元串,切斷了對象的所有引用關系,然後再将這個字元串轉化回對象,此時得到的是一個全新的對象,與原來的對象不再有任何聯系,也就解決了新對象污染原始對象的問題。

繼續閱讀