在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; } }