深拷貝淺拷貝和賦值
如何實現淺拷貝
物件
function
shallowcopy
(src)
;for
(var prop in src)
}return dst;
}
[注釋]:hasownproperty() 方法會返回乙個布林值,這個方法可以用來檢測乙個物件是否含有特定的自身(非繼承)屬性。
for…in 迴圈只會遍歷可列舉屬性,再加上 hasownproperty()方法,可以忽略掉繼承屬性,這樣就能確保遍歷的是obj的可列舉的自身屬性
陣列slice()和concat()
***.slice() 從頭擷取到尾
***.concat() 拼接
深拷貝json實現
說白了 就是利用json.stringify 將js物件序列化(json字串),再使用json.parse來反序列化(還原)js物件
json.parse(json.stringify(obj))
//缺點:物件必須遵從json的格式
let obj1 =
}let obj4 = json.parse(json.stringify(obj1))
console.log(obj4) // 好像漏了些什麼
問題object.assign
object.assign(target, …sources)
object.assign() 方法用於將所有可列舉的屬性的值從乙個或多個源物件複製到目標物件。它將返回目標物件
// 複製
let c = object.
assign(,
);console.
log(c)
;//合併
let o =
let c = object.
assign
(o,,,)
console.
log(c)
//如果物件本身存在的屬性會更新,不存在的屬性會增加
let o =
let oo =
let c = object.
assign
(o, oo)
;console.
log(o);//
console.
log(oo);//
console.
log(c)
;//
迭代遞迴法function
judgetype
(a)function
deepcopy
(a)}
else
if(type ===
'[object object]'
)for
(const prop in a)}}
else
return data
}
物件的深淺拷貝
import dsjcopyctrl.h inte ce dsjcopyctrl end implementation dsjcopyctrl void viewdidload void strcopy void arrcopy void diccopy 0x2810955e0 nssingleen...
物件的深淺拷貝
object.assgin 會合併乙個物件生成乙個新物件。如果物件是普通型別改變之後新物件不會改變,如果是引用型別改變後新物件也會改變,所以obeject.assgin實際上還是淺拷貝。var obj var newobj object.assgin obj obj.aa 2 obj.bb.item...
物件的深淺拷貝
理解 一,物件的淺拷貝 1.0 簡單的賦值 2.0 object.assign object.assign 方法可以把任意多個的源物件自身的可列舉屬性拷貝給目標物件,然後返回目標物件。但是 object.assign 進行的是淺拷貝,拷貝的是物件的屬性的引用,而不是物件本身 二,物件的深拷貝 1.0...