解構賦值是深拷貝還是淺拷貝?

什么是深拷貝、淺拷貝

深拷貝:修改新變量的值不會影響原有變量的值。默認情況下基本數(shù)據(jù)類型都是深拷貝。
淺拷貝:修改新變量的值會影響原有的變量的值。默認情況下引用類型都是淺拷貝。

解構賦值

ES6的新特性,按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為解構。具體操作本文章不做描述。
那么我們在使用解構賦值的時候,到底是深拷貝還是淺拷貝呢?我們可以通過以下的例子得出結論:

const a = {
      name: 'name',
      age: 18,
      marriage: false,
      addr: { province: 'sichuan', city: 'chengdu' }
    }

let { name, age, marriage, addr } = a

name = 'myname'
age = 26
marriage = true
addr.province = 'shanghai'
addr.city = 'shanghai'

console.log(name, age, marriage, addr) 
console.log(a) 

輸出

// myname 26 true {province: "shanghai", city: "shanghai"}
// { name: "name", age: 18, marriage: false, addr: {province: "shanghai", city: "shanghai"} }

以上例子中,我們從對象a中解構賦值了name、age、marriage、addr四個變量,分別是string、numberboolean 、object類型。改變這四個變量的值后,再與a原來的值作對比,我們發(fā)現(xiàn)a的name,age,marriage屬性沒有改變,而addr屬性發(fā)生了改變。由此可以得出結論,解構賦值對object類型只是淺拷貝。
實際上,無論是使用擴展運算符(...)還是解構賦值,對于引用類型都是淺拷貝。所以在使用splice()、concat()、...對數(shù)組拷貝時,只有當數(shù)組內部屬性值不是引用類型是,才能實現(xiàn)深拷貝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容