對象的複製引起的深拷貝與淺拷貝

今天在vue裏面寫一個地址的表單修改功能,發現直接拿了row的數據以後,給了一個對象,可是發現我在彈出的表單框去改那些值,下面一層的地址原數據也在進行變化。

我從新理了一下邏輯,正常來講我用來臨時提交用的新建的一個臨時對象,應該沒有雙向綁定到顯示地址的那邊的數據的,那爲何二者數據綁定到了一塊兒呢。

  • 深拷貝就是這樣出現的了,借鑑了大神的解釋
  1. 引用數據類型--名存在棧內存中,值存在於堆內存中,可是棧內存會提供一個引用的地址指向堆內存中的值
  2. 當b=a進行拷貝時,其實複製的是a的引用地址,而並不是堆裏面的值。
  3. 而當咱們a[0]=1時進行數組修改時,因爲a與b指向的是同一個地址,因此天然b也受了影響,這就是所謂的淺拷貝了。
  4. 那,要是在堆內存中也開闢一個新的內存專門爲b存放值,就像基本類型那樣,豈不就達到深拷貝的效果了
  5. 深拷貝僅出如今引用類型上面
  • 所以參考了大神的解決方法,以爲若是沒有太多特殊的數據布爾和undefined那種特殊類型,就能夠直接使用json轉換的方法來解決
  • let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
    }   
    複製代碼
  • 由於小弟比較菜。因此對遞歸有點陌生不太敢使用。因此此次筆記就到這裏了 有錯請務必告訴小弟
相關文章
相關標籤/搜索