深拷貝、淺拷貝
歡迎大家閱覽我的文章、感謝!
你好!這是一篇關於javaScript深、淺拷貝的文章、做前端的小夥伴都應該有所瞭解、如有不正確的地方,歡迎各位大佬糾正。如果你正巧翻到這篇文章,希望你不要關閉,花出10多分鐘仔細閱讀,我相信你一定能看懂,並且進行實際代碼練習,一定能掌握並老記。
淺拷貝
簡單的說,淺拷貝就是對一個對象的地址的複製,並沒有開闢新的棧,也就是複製的結果是兩個對象指向同一個地址,修改其中一個對象的屬性,則另一個對象的屬性也會改變。
深拷貝
深拷貝就是開闢新的棧,兩個對象對應兩個不同的地址,修改一個對象的屬性,不會改變另一個對象的屬性。
舉例子
淺拷貝:
深拷貝:
先看下面的代碼:
var original = {
name: '騰',
age: 18,
position: '工程師',
};
假如我們要創建一個這個對象的副本(複製),這樣即使原始被改變過的話,依舊可以通過副本得到原始對象的值。
這樣:
var duplicate = original; // 淺拷貝
試着改變一個值:
original.name = '瑩';
這樣的話,原始對象original的屬性name會跟着變成“瑩”,因爲這是一個淺拷貝,這樣就獲取不到原始對象原來那個值了。所以這麼做是不正確的。
但是,通過用原始original變量的屬性創建一個全新的變量,就能創建一個深拷貝副本。
看代碼:
var duplicate = {
name: original.name,
age: original.age,
position: original.position
}; // 深拷貝
現在,如果更改duplicate.name,只是影響duplicate,不會影響original。