首頁 > web前端 > js教程 > 為什麼當原始陣列發生變化時,JavaScript 陣列副本也會變更?

為什麼當原始陣列發生變化時,JavaScript 陣列副本也會變更?

Mary-Kate Olsen
發布: 2024-12-18 21:31:14
原創
260 人瀏覽過

Why Do JavaScript Array Copies Change When the Original Changes?

為什麼在 JavaScript 中更改陣列會影響副本?

在 JavaScript 中,陣列是對象,變數保存這些對象的引用,而不是物體本身。在為陣列指派新值時,這種繼承可能會導致意外行為。

考慮以下範例:

// Declare an array and its copy
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;

// Modify the copy of the array
copyOfMyArray.splice(0, 1);

// Display the values
alert(myArray); // ['b', 'c']
alert(copyOfMyArray); // ['b', 'c']
登入後複製

透過操作 copyOfMyArray,我們無意中修改了 myArray。這是因為像 myArray 和 copyOfMyArray 這樣的變數指向同一個底層陣列物件。

陣列與數字

相反,當使用像 myNumber 和 copyOfMyNumber 這樣的數字時,每個變數都會儲存值本身的副本。修改一個不會影響另一個。

var myNumber = 5;
var copyOfMyNumber = myNumber;

// Decrement the copy of the number
copyOfMyNumber--;

// Display the values
alert(myNumber); // 5
alert(copyOfMyNumber); // 4
登入後複製

後果和解決方法

理解這種行為對於正確的物件操作至關重要。如果您確實需要數組的不同副本,請使用 slice 方法建立淺副本:

var copyOfMyArray = myArray.slice(0);
登入後複製

但是,值得注意的是,此淺副本僅複製數組對其元素的引用。任何內部物件仍將引用相同的原始實例。

以上是為什麼當原始陣列發生變化時,JavaScript 陣列副本也會變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板