JavaScript中的深拷贝和浅拷贝

JavaScript中的深拷贝和浅拷贝

    深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。

深拷贝

    深拷贝复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制。 深拷贝后的对象与原来的对象是完全隔离的,互不影响, 对一个对象的修改并不会影响另一个对象。

    可 以 使 用 for in 、 Object.assign 、 扩 展 运 算 符 ... 、Array.prototype.slice()、Array.prototype.concat() 、递归等递归函数实现深拷贝

浅拷贝

    浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化。

浅拷贝只会拷贝简单数据类型 复杂数据类型不会直接拷贝,

只会拷贝它的内存地址(内存地址相同指向的是同一个对象)

例如:Object,Array,function

// 浅拷贝案例

var arr = [1,2,3,4,5];

let arr2 = [6,7,8,9];

// 如果要将arr2拷贝一份到arr中的话可以使用ES5数组的concat方法或ES6的扩展运算符 // ES5

var arr = arr.concat(arr2);

console.log(arr)

// ES6

var arr = [1,2,3,4,5,...arr2];

console.log(arr)

// 如果数组中有复杂类型则会拷贝内存地址

var arr = [1,2,{a:3,b:4},5,6];

var arr2 = [7,8,9,...arr];

// 他俩完全相同 证明内存地址相同 要想拷贝一份完全新的对象需要使用深拷贝 console.log(arr2[5] === arr[2])

ES5-->深拷贝


ES5-->深拷贝

ES6-->深拷贝

ES6-->深拷贝

给Object的原型添加深拷贝方法

给Object的原型添加深拷贝方法


end

你可能感兴趣的:(JavaScript中的深拷贝和浅拷贝)