前言 经常会在一些网站或博客看到“深克隆”,“浅克隆”这两个名词,其实这个很好理解,今天我们就在这里分析一下 js深拷贝和浅拷贝 。 浅拷贝 我们先以一个例子来说明js浅拷贝: var n = {a: 1, b: 2} var m = n m.a = 12 console.log(n.a) // ? 上面显然 n.a 的值会变为 12,这就是js浅拷贝。 浅拷贝只是拷贝的指向对象的指针,本质上还是指向同一个对象。 深拷贝 同样我们还是以一个例子来说明啥叫 js deep clone : var n = {a: 1, b: 2} var m = {a: n.a, b: n.b} m.a = 12 console.log(n.a) // ? 上面的输出结果显然还是 1 ,m 和 n 虽然所有的属性和值全部相同,但是它们是两个不同的对象,它们在堆内存中占据两块不同的内存地址,这就是深度拷贝。 深度拷贝就是完全复制一个新的对象出来,它们在堆内存中完全占据两个不同的内存地址。 js 实现深拷贝 简单一维数据结构 手动直接赋值 上面的 深拷贝 例子 利用 ES6 Object.assign() 方法 const obj = {name: 'cc', age: 24} const newObj = Object.assign({}, obj) obj.name = 'cc1' newObj