關於深拷貝 擴充套件運算子

2021-10-05 23:25:05 字數 781 閱讀 1668

…擴充套件運算子

之前一直以為…可以進行深拷貝,但其實不是

第一種情況,可以深拷貝的

//,[value]當value是string,number,boolean型別都是深拷貝

var aa=[1

,2,3

,4],bb;

bb=[

...aa]

;bb[0]

=5;console.

log(aa)

//[1, 2, 3, 4]

console.

log(bb)

//[5, 2, 3, 4]

當物件或陣列穿插或者多層時拷貝的就是引用位址了,

//,[value] value為array,object拷貝的是引用位址,一旦改變原先的值也會發生改變

var aa=

,bb;

bb=[

...aa]

;bb[0]

.aa=5;

console.

log(aa)

//console.

log(bb)

//var aa=[[

1,2,

3]],bb;

bb=[...aa]

; bb[0]

[1]=

5;console.

log(aa)

//[[1, 5, 3]]

console.

log(bb)

//[[1, 5, 3]]

過載 運算子實現深拷貝

1.前面已經敘述過淺拷貝的問題,當類成員含有指標時,可以通過顯示編寫拷貝建構函式的方法,實現用乙個類初始化另乙個類的深拷貝。2.但是如果是賦值運算,即例子中的 obj2 obj1,則不會呼叫拷貝建構函式,這個時候需要通過過載 運算子的方式實現深拷貝,步驟已經在 注釋中提出。include iostr...

擴充套件運算子

三個點,主要是用來將陣列幻化為用逗號分隔的引數序列。合併陣列 與解構賦值結合 如果將擴充套件運算子用於陣列賦值,只能放在引數的最後一位,否則會報錯。將字串轉為真正的陣列 可以將類似陣列的物件轉為真正的陣列 map和set結構,generator函式 擴充套件運算子內部呼叫的是資料解構的iterato...

擴充套件運算子

首先點明,es6的新特性之擴充套件運算子 spread 就是三個點 和es6的可變引數形式一樣。擴充套件運算子是很強大的乙個運算子,它能簡化很多在es5中會比較繁雜的操作。對於這個運算子,概念性的東西不多,所以這裡我就簡明扼要的給出一些它的常用場景 1 可變引數。雖然可變引數嚴格說不是擴充套件運算子...