深拷贝的原生js实现
<html> <head> <title></title> </head> <body> <script type="text/javascript"> function copy(arr){ var obj=arr.constructor==Array?[]:{}; //第二种方法 var obj=arr instanceof Array?[]:{} for(var item in arr){ if(typeof arr[item]==="object"){ obj[item]=copy(arr[item]); }else{ obj[item]=arr[item]; } } return obj; } var obj={a:1,b:2,c:{d:1,e:[3,4,5]}} var newobj=copy(obj); obj.c.e.push(7); console.log(obj); console.log(newobj); </script> </body> </html>
上面代码中有测试输出原对象和深拷贝到newobj上的新对象,如果深拷贝成功的话,obj里面的引用类型改变值,是不会影响到新对象的。以下是在控制台打印的结果:
果然obj和newobj的引用类型互相没有影响,而不像浅拷贝那样引用类型共享。