關於陣列賦值指向 拷貝的問題

2022-02-16 13:09:51 字數 941 閱讀 3676

我們有這樣一段**

//

構建資料

let obj = ;

let list =;

for(let i=0; i<60; i++) list.push(obj)

//開始處理資料

let arr =;

let clonearr =;

for(let j=0; j<2; j++) arr.push(clonearr)

list.map((item,inx) =>)

console.log(arr)

我們理想的狀態應該是這樣的

但是實際得到的結果是

這裡存在乙個陣列內部指向問題和拷貝賦值的問題,在我們通過for迴圈為arr動態生成內部陣列時,這裡我們push的是事先宣告的陣列變數clonearr,下面在map迴圈裡面無論是操作的arr[0]還是arr[1],都是在操作clonearr這個陣列變數,arr[0]、arr[1]它們都指向clonearr,為了解決這個問題,我們可以在動態給arr內部push陣列時,使用下面兩種方式:

1.我們直接使用深拷貝來為其賦值,在map迴圈中操作arr內部陣列,他們的指向由於深拷貝作用,不會在指向陣列變數clonearr

arr.push(json.parse(json.stringify(clonearr)))
2.摒棄掉clonearr,每次push都是直接建立乙個新的陣列,就不會出現指向和拷貝作用

arr.push()
tips:在工作中會有很多人遇到這種細節上面的問題,但是很多人不明就裡,其實只要理解到原理,其實就很簡單。

關於This指向,改變指向, 深淺拷貝的幾種方法

this出現在建構函式中,指向建構函式新建立的物件 this出現在函式中,那個物件呼叫,就指向呼叫者。this出現在全域性函式中 永遠指向window this出現在嚴格模式中 永遠不會指向window this出現在原型函式中 參考2 this出現在箭頭函式中 定義時的環境 父級物件 functi...

關於this的指向問題

呼叫方式有以下四種只需要記住一點,this的指向取決於以什麼樣的方式去呼叫它 1 函式呼叫模式 funcction fn fn 那麼此時的this,指向的是我們的windows 2 方法呼叫模式 var obj obj.sayhi obj.sayhi 裡面的this 那麼必定指向這個 obj 3 構...

關於 this 指向問題

一 面試題 function foo foo 全域性物件 foo.call 123 123二 面試題 const obj1 obj1.foo obj1 const fn obj1.foo fn 三 面試題 const obj2 bar obj2.foo 沿著作用域向上找最近的乙個 function ...