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