浅拷贝:B复制了A,当修改A时,B跟着变。
深拷贝:B复制了A,当修改A时,B没变化。
浅拷贝:
// 方法一:循环遍历
function simpleClone(objNew) {
var obj = {}
for (var i in objNew) {
obj[i] = objNew[i]
}
return obj
}
// 方法二:Object.create()
var objCopy = Object.create(obj) // 拷贝到了_proto_属性里
深拷贝:(方法二比较常用)
// 方法一:循环遍历
function deepClone(tartgetObj, endObj) {
var obj = endObj || {}
for (var key in targetObj) {
if(typeof targetObj[key] === 'object') {
obj[key] = tartgetObj.construtor === Array ? [] : Object.create(null)
deepClone(tartgetObj[key], obj[key])
} else {
obj[key] = targetObj[key]
}
}
return obj
}
// 方法二:JSON.stringify() 和 JSON.parse()
var copyObj = JSON.parse(JSON.stringify(targetObj)) // object -> string -> object