js中对象的浅拷贝和深拷贝的区别

Posted 南木n

tags:

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

js中对象的浅拷贝和深拷贝的区别

浅度拷贝:复制一层对象的属性,并不包括对象里面的为引用类型的数据,当改变拷贝的对象里面的引用类型时,源对象也会改变。

深度拷贝:重新开辟一个内存空间,需要递归拷贝对象里的引用,直到子属性都为基本类型。两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。

数据的类型:

一般数据(值传递):字符,数值,布尔,undefined
拷贝(复制)时,传递的是值,修改新数据,不会影响老数据
复杂数据(引用传递):对象
拷贝(复制)时,传递的是内存地址的指向,两个变量指向一个地址,修改新数据,会影响老数据

var a = 10;
function fn(a2){
a2 = 20;
}
fn(a)
console.log(a); //10

对象的浅拷贝:值拷贝地址,不拷贝值

var obj = {name:"admin"};
function fn(obj2){
obj2.name = "root";
}
fn(obj)
console.log(obj) //name:root

对象的深拷贝:不拷贝地址,只拷贝值

var obj = {
name:"admin"
}
var obj2 = {};

for(var i in obj){
obj2[i] = obj[i]
}

obj2.name = "root"

console.log(obj)//name:"admin"
console.log(obj2)//name:"root"

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

js 对象的浅拷贝和深拷贝

js的浅拷贝和深拷贝

js中的浅拷贝和深拷贝

js对象浅拷贝和深拷贝详解

深拷贝与浅拷贝的实现(一)

JS的浅拷贝和深拷贝