js的浅拷贝与深拷贝

Posted lhyhappy65

tags:

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

浅拷贝和深拷贝只针对对象和数组这样的数据类型,对于基本的数据类型不存在这些问题

1、浅拷贝

浅拷贝之后的对象或数组与原对象或数组指向内存中的同一个地址,改变其中任何一个,另一个也会相应的被改变

2、深拷贝

深拷贝之后的对象或数组与原对象和数组的内存地址是独立的,改变任何一个,另一个都不会受影响

数组的深拷贝

var a = [1,2,3];
var b = a.concat();//数组拼接
var c = a.slice(0);//截取数组

对象的深拷贝

手动复制,将属性一个个复制到新对象中,或使用Object.assign()该方法只能复制基本数值的属性,若属性为引用类型,则为浅复制,即这两种方法的处理深度只有一层,没有做到真正的深复制

转成JSON再转回来

var obj1 = {a:1,b:{a:11,b:22}};
var obj2 = JSON.parse(JSON.stringify(obj1))

该方法值适用于JSON格式的对象,而function没有办法转成JSON,该方法只适用于单纯的数据对象

jquery的$.extend方法

lodash中的_.cloneDeep

 

以上是关于js的浅拷贝与深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

JS的浅拷贝与深拷贝

js对象的浅拷贝与深拷贝

js的浅拷贝与深拷贝

JS专栏JS对象的浅拷贝与深拷贝

javascript中的浅拷贝ShallowCopy与深拷贝DeepCopy

对象的浅拷贝与深拷贝