在js中若是直接用=进行数组的拷贝,那么这样就只是浅拷贝,两个变量实际指向的是同一个地址,数组
这不是咱们想要的结果。this
所以咱们须要对数组进行深拷贝(对象亦如是)。spa
通常的数组(不包括对象元素的数组),咱们能够直接使用concat或slice进行深拷贝,亦或者直接写一个for循环进行逐一复制。code
如:对象
从以上结果能够看出concat和slice(0)的确能够进行深拷贝。可是若是数组中包含有对象,而咱们又要往数组中插入对象时,这两种方法就不行了。blog
从上面结果可知,咱们进行的只是一次浅拷贝。若是咱们要进行深拷贝,那么就须要对整个数组以及数组中的对象进行遍历,注意复制才行。io
var deepCopy=function(arr) { if (arr instanceof Array) { var n = []; for (var i = 0; i < arr.length; ++i) { n[i] = this.deepCopy(arr[i]); } return n; } else if (arr instanceof Object) { let n = {}; for (var i in arr) { n[i] = this.deepCopy(arr[i]); } return n; } else { return arr; } }