Node.js项目调试中实习生表示遇到了一个肥肠神奇的状况:将object push到array中,修改object,array中的内容也随之修改了。
询问前端的小伙伴之后第一次发现了原来还有浅复制和深复制的概念。
浅拷贝(shallow copy)
拷贝原对象的引用,这是最简单的浅拷贝。
这个有点像c中的指针复制。$.extend({}, obj); Array.prototype.slice()和Array.prototype.concat()
都会返回一个数组或者对象的浅拷贝。
这次事情中的操作便是用了push复制了一个object,但object中的次级内容都是直接复制的引用。
深拷贝(deep copy)
深拷贝也就是拷贝出一个新的实例,新的实例和之前的实例互不影响。即可以避免浅拷贝中的问题。
$.extend(true, {}, ...)
、Object.assign({}, ...)
以及利用JSON.stringify
和JSON.parse
都可以实现深拷贝