深拷贝和浅拷贝的异同以及实现方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝和浅拷贝的异同以及实现方式相关的知识,希望对你有一定的参考价值。

参考技术A 相同点:

深拷贝和浅拷贝都是用于对复杂数据类型进行复制。

差异:

其区别在于深拷贝是对原数据进行递归复制,并存到一个新地址,从而使新老数据互不影响。

而浅拷贝只是对原数据的地址进行拷贝,从而会使新老数据相互影响。

常用实现方法:

深拷贝:

1.递归复制(全部适用)

function duplicate(obj)

var newObj = null;

If(obj !== null && typeof(obj)==obj)

newObj=Obj instanceof Array?[]:;

For (var i in obj)

newObj[i] = duplicate[i];



else

newObj = obj;



return newObj;



2.JSON.stringify(obj);

关于这个方法有一个缺点就是 不能拷贝function和undefine( 在火狐上直接报错error,而在谷歌上会直接忽略掉相关属性) 。因为这是通过把数据转化为字符串的形式赋值给一个新地址。

浅拷贝:

1.函数实现

function simpleDuplicate(obj)

Var newObj =;

for(var I in obj)

If(obj.hasOwnProperity[i])

newObj[i] = obj[i];





return newObj;



2.各种赋值、合并删除操作。

以上是关于深拷贝和浅拷贝的异同以及实现方式的主要内容,如果未能解决你的问题,请参考以下文章

什么是深拷贝和浅拷贝以及如何实现深拷贝

如何实现数组深拷贝和浅拷贝?

javascript深拷贝和浅拷贝以及实现方法(推荐)

JavaScript的深拷贝和浅拷贝

JS的深拷贝和浅拷贝

JavaScript深拷贝和浅拷贝数组