javaScript淺拷貝、深拷貝

數據類型
js的數據類型有兩種:
1.基本數據類型:數值、字符串、布爾、null、undefined (值類型)
存放在棧中,因此複製基本數據類型的值是會新開一個棧內存算法

clipboard.png

2.引用數據類型:對象
對象引用存放在棧中,對象值存放在堆中,因此複製引用類型複製的是應用地址,而不是引用類型的值函數

clipboard.png

淺拷貝
若是咱們要複製對象的全部屬性都不是引用類型時,就能夠使用淺拷貝,實現方式就是遍歷並複製,最後返回新的對象。
function simpleClone(initalObj) {spa

var obj = {};    
      for ( var i in initalObj) {
        obj[i] = initalObj[i];
      }    
      return obj;
    }

concatcode

clipboard.png

slice對象

clipboard.png

assign繼承

clipboard.png

深拷貝
深度拷貝就是把父對象拷貝到子對象上,並且二者的內存和之後的操做都互不影響的拷貝!
1.遞歸遞歸

clipboard.png

2.借用JSON對象的parse和stringify
clipboard.pngip

clipboard.png

3.JQ的extend方法。
$.extend( [deep ], target, object1 ,[ objectN ] )內存

deep表示是否深拷貝,爲true爲深拷貝,爲false,則爲淺拷貝原型鏈

target Object類型 目標對象,其餘對象的成員屬性將被附加到該對象上。

object1 objectN可選。 Object類型 第一個以及第N個被合併的對象

clipboard.png

clipboard.pngjQuery.extend()只複製可枚舉的屬性,不繼承原型鏈,函數複製引用,內部循環引用不處理。而lodash實現的就更爲優秀,它實現告終構化克隆算法。

相關文章
相關標籤/搜索