深拷贝和浅拷贝

2017-09-09  本文已影响0人  blueblue_c41a
首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。

一、浅拷贝

在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,改变newArr,arr也会变化

const arr = [1, 2, 3];
const newArr = arr;    // 直接复制

newArr.reverse();  // [3,2,1]
arr // [3,2,1]

二、深拷贝

深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误。

const arr = [1, 2, 3];

// 通过JSON.parse,JSON.stringify进行深拷贝
const newArr = JSON.parse(JSON.stringify(arr));

newArr.reverse();  // [3,2,1]
arr // [1,2,3]

三、举例

例1:仅仅复制对象的值

var o = {a: 1};

Object.keys(o)   // ['a']

o.hasOwnProperty('a')   // true

var d = {a:o.a}

d  // {a: 1}

d.a = 4;

d  // {a: 4}

a  // {a: 1}

例2:通过深拷贝创建一个属性值一样内存不一样的对象

var e = JSON.parse(JSON.stringify(o))

e  // {a: 1}

e.a = 3;

e // {a: 3}

o // {a: 1}
上一篇下一篇

猜你喜欢

热点阅读