JS 淺拷貝與深拷貝

首先,對於簡單的變量,內存小,我們直接複製不會發生引用,
也就不會有淺拷貝與深拷貝的分別

對一個對象

logo: {
          "AspectRatio":{
            "AspectRatio":"Use original"
          },
          "Left":"50",
          "LogoSizeReference":"Width",
          "Top":"50",
          "Size":"50"
        }

以下三種拷貝方式

1. 直接賦值 這種方式即淺拷貝

當使用直接賦值進行拷貝時,其實複製的是引用地址,而並非堆裏面的值
這種方式即引用,更改其中的任何一個對象,其他的也會跟着改變。

2. Object.assign() 這種方式有人將之稱爲深拷貝,我認爲只能算半深拷貝。

這種方式開始我也以爲是深拷貝
然而對業務需求而言 還是不夠ok
用了兩天我發現"AspectRatio"這裏還是關聯!

這種拷貝方式如果沒有紅線框內的屬性,或許也可以稱作深拷貝

在這裏插入圖片描述

因爲這個屬性是一個對象,用這種方式也只能複製其引用地址。

附 Object.assign() 介紹
(1) 用於將所有可枚舉屬性的值從一個或多個源對象複製到目標對象,需要兩個對象作爲參數,第一個參數是目標對象,後面的參數都是源對象。返回值爲目標對象。
(2) 可以用於合併對象、克隆對象以及更改屬性的值(參考Object.assign方法的使用

3. JSON.parse(JSON.stringify()) 深拷貝

借用JSON對象的parse和stringify後真正實現了深拷貝,所有數據都互不影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章