JSON对象中的parse和stringify结合使用,常常被用来实现深拷贝一个对象,下面的代码实现了对对象obj的深拷贝:
1 | var obj = {name:"obj"}; |
深拷贝的一个作用就是,修改obj的name属性,不会影响objCopy的name属性。
但是这个方法不是万能的,它仍然有一定的局限性
如果被拷贝的对象中有function,则拷贝之后的对象就会丢失这个function,比如
1
2
3
4var obj = {
func:function(){}
};
var objCopy = JSON.parse(JSON.stringify(obj)); // 最终得到 {}如果被拷贝的对象中某个属性的值为undefined,则拷贝之后该属性会丢失,比如
1
2
3
4var obj = {
name:undefined
};
var objCopy = JSON.parse(JSON.stringify(obj)); // 最终得到 {}如果被拷贝的对象中有正则表达式,则拷贝之后的对象正则表达式会变成Object,比如
1
2
3
4var obj = {
reg:/abc/
};
var objCopy = JSON.parse(JSON.stringify(obj)); // 最终得到 {reg:{}}
为了让代码更加稳健,建议使用第三方库lodash中的cloneDeep方法