JavaScript的深、浅拷贝
JavaScript的深、浅拷贝
数组的浅拷贝
数组嵌套了数组或者对象,无论是新数组还是旧数组都发生了变化,也就是说使用 concat slice 方法,克隆的并不彻底。
如果数组元素是基本类型,就会拷贝一份,互不影响,而如果是对象或者数组,就会只拷贝对象和数组的引用,这样我们无论在新旧数组进行了修改,两者都会发生变化。
1 | var arr = [1, 2, 3, 4]; |
数组的深拷贝
深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。
1 | // **不能拷贝函数** |
浅拷贝的实现
1 | function shallow(obj) { |
深拷贝的实现
1 | function deep(obj) { |