object.assign我們經常會用到合併物件,當然利用object.assign性質我們也可以實現物件的拷貝。
var obj1 =
var obj2 = object.assign({}, obj1)
obj2.a = 4
console.log(obj1, obj2)
結果如圖:
這裡要注意的是object.assign第乙個引數必須是個空物件
var obj1 =
var obj2 =
obj2.a = 4
console.log(obj1, obj2)
結果如圖:
這裡一樣可以實現之前上面的結果。
但這兩種拷貝有乙個問題就是只能賦值一層,假設我們有如下資料結構
var obj1 =
var obj2 = [...obj1]
obj2[0].childs =
console.log(obj1, obj2)
我們會發現列印出的結果如下:
上圖可看出obj1,obj2 的結果均變了,這並不是我們想要的結果,所以我們要用到深拷貝。
var obj1 =
var obj2 = json.parse(json.stringify(obj1))
obj2[0].childs =
console.log(obj1, obj2)
結果如下:
這樣的話就能達到我們想要的結果。
這種方法簡單,但也有弊端,看看下面的資料結構:
var obj1 = [,
age: undefined}]
var obj2 = json.parse(json.stringify(obj1))
obj2[0].childs =
console.log(obj1, obj2)
結果:
我們從結果中發現,值為undefined,或者function的時候並不會拷貝過來。
var obj1 = [,
age: undefined}]
var obj2 = extend(obj1)
obj2[0].childs =
console.log(obj1, obj2)
function extend(data)
for(let i in data)
return val
} else
}
結果: 深拷貝和淺拷貝的幾種方法
for in 迴圈 var a var b for var k in a 2.object.assgin 與 號區別在於,修改了a.name就會變化,而這個不會變,但是這個到下面一層也會變化!就是說等號只進行了一層深拷貝。var a var b object.assign a 如果b原來是有屬性的物...
js 物件深拷貝 js淺拷貝及深拷貝的幾種方法
乙個專案開發中經常會用到需要複製乙個物件或者陣列,但是卻不能改變原始物件,所以就要用到拷貝,拷貝又分深拷貝和淺拷貝,今天列舉一下幾種拷貝形式。object.assign我們經常會用到合併物件,當然利用object.assign性質我們也可以實現物件的拷貝。var obj1 var obj2 obje...
陣列深拷貝 js深拷貝的幾種方法
1.使用遞迴 使用遞迴的方式實現陣列 物件的深拷貝function deepclone obj 進行深拷貝的不能為空,並且是物件 if obj typeof obj object else return objclone 2.通過json物件 通過js的內建物件json來進行陣列物件的深拷貝func...