JSON.stringify/parse 實現深拷貝的缺點


JSON對象中的parse和stringify結合使用,常常被用來實現深拷貝一個對象,下面的代碼實現了對對象obj的深拷貝:

var obj = {name:"obj"};
var objCopy = JSON.parse(JSON.stringify(obj)); //  {name: "obj"}

深拷貝的一個作用就是,修改obj的name屬性,不會影響objCopy的name屬性。
但是這個方法不是萬能的,它仍然有一定的局限性

  1. 如果被拷貝的對象中有function,則拷貝之后的對象就會丟失這個function,比如
var obj = {
      func:function(){}
};
var objCopy = JSON.parse(JSON.stringify(obj)); //  最終得到 {}
  1. 如果被拷貝的對象中某個屬性的值為undefined,則拷貝之后該屬性會丟失,比如
var obj = {
      name:undefined
};
var objCopy = JSON.parse(JSON.stringify(obj)); //  最終得到 {}
  1. 如果被拷貝的對象中有正則表達式,則拷貝之后的對象正則表達式會變成Object,比如
var obj = {
      reg:/abc/
};
var objCopy = JSON.parse(JSON.stringify(obj)); //  最終得到 {reg:{}}

為了讓代碼更加穩健,建議使用第三方庫lodash中的cloneDeep方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM