數據類型
js的數據類型有兩種:
1.基本數據類型:數值、字符串、布爾、null、undefined (值類型)
存放在棧中,因此複製基本數據類型的值是會新開一個棧內存算法
2.引用數據類型:對象
對象引用存放在棧中,對象值存放在堆中,因此複製引用類型複製的是應用地址,而不是引用類型的值函數
淺拷貝
若是咱們要複製對象的全部屬性都不是引用類型時,就能夠使用淺拷貝,實現方式就是遍歷並複製,最後返回新的對象。
function simpleClone(initalObj) {spa
var obj = {}; for ( var i in initalObj) { obj[i] = initalObj[i]; } return obj; }
concatcode
slice對象
assign繼承
深拷貝
深度拷貝就是把父對象拷貝到子對象上,並且二者的內存和之後的操做都互不影響的拷貝!
1.遞歸遞歸
2.借用JSON對象的parse和stringifyip
3.JQ的extend方法。
$.extend( [deep ], target, object1 ,[ objectN ] )內存
deep表示是否深拷貝,爲true爲深拷貝,爲false,則爲淺拷貝原型鏈
target Object類型 目標對象,其餘對象的成員屬性將被附加到該對象上。
object1 objectN可選。 Object類型 第一個以及第N個被合併的對象
jQuery.extend()只複製可枚舉的屬性,不繼承原型鏈,函數複製引用,內部循環引用不處理。而lodash實現的就更爲優秀,它實現告終構化克隆算法。