陣列互相賦值記憶體的變化

2021-10-05 13:57:35 字數 857 閱讀 7618

好多同學在工作中會遇到關於陣列賦值的問題,比如迴圈陣列a去操作a的值,卻發現b的值也被修改了,很困惑,不明白為什麼,下面大概講一下我的理解,希望能夠對大家有所幫助。

// 宣告a,給a賦初始值,這個時候會在記憶體中給a分配一段空間,內容是a的值對應的記憶體空間的指標

var a =

;// 宣告b,把a賦值給b,這個時候會在記憶體中給b也分配一段空間,儲存的內容跟a的一樣,也是a的值對應的那段記憶體空間的指標

var b = a;

// 更改a的值,這個時候列印出來b也會跟著變動,因為a和b指向同乙個值a[0

].key =2;

// 或者a.push或者a.splice

console.

log(

json

.stringify

(b))

;// 控制台列印結果為:

// [

//

// ]

// 給a重新賦值,記憶體會給新的值分配一段空間,這個時候變數a的那段記憶體空間裡存的值就變成了新的值對應的空間的指標,而變數b指向的還是舊值對應空間的指標,所以這時候列印出來b不變,至此變數a和變數b其實就沒關係了

a =;

console.

log(

json

.stringify

(b))

;// 控制台列印出來的結果:

// [

//

// ]

放一張示意圖,希望能更清晰。

以上

解構賦值 陣列的解構賦值

什麼是解構賦值?es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 destructuring 我的理解是 允許宣告一種模式 陣列 物件等 裡面包含乙個或多個變數,再分別對這些變數遍歷 按照對應位置 賦值。以前,為變數賦值,只能直接指定值。let a 1 let b 2 通...

陣列的引用(陣列的賦值)

public class se int b system.out.println 陣列a的元素個數為 a.length system.out.println 陣列b的元素個數為 b.length system.out.println 陣列a的引用 a system.out.println 陣列b的引...

C Char陣列的賦值

1 定義的時候直接用字串賦值 char a 10 hello sizeof a 為10 或char a hello sizeof a 為6 注意 不能先定義再給它賦值,如 char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 sizeof a 為10 ...