浅拷贝
概念:浅拷贝的意思就是只复制引用,而未复制真正的值。仍指向同一个地址,修改时原对象也会受到影响
方法:
1.利用 =
赋值操作符实现浅拷贝。
2.数组的浅拷贝一般使用 slice、concat。
3.数组浅拷贝 - 遍历 。
4.对象浅拷贝 - Object.assign()。
5.对象浅拷贝 - 扩展运算符
函数封装
//对象及数组浅拷贝函数封装
function shallowCopy(objOrArr){
var type = objOrArr instanceof Array ? 'arr' : 'obj'
var newObjOrArr = objOrArr instanceof Array ? [] : {}
if(type === 'arr'){
newObjOrArr=[].concat(objOrArr)
}else{
for(var key in objOrArr){
if(objOrArr.hasOwnProperty(key)){
newObjOrArr[key]= objOrArr[key]
}
}
}
return newObjOrArr
}
深拷贝
概念:深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了。修改时原对象不再受到任何影响
方法:
1.利用 JSON
对象中的 parse
和 stringify
。
2.
利用递归来实现每一层都重新创建对象并赋值。
函数封装
//对象及数组深拷贝函数封装
function deepCopy(objOrArr) {
var type = objOrArr instanceof Array ? 'arr' : 'obj'
var newObjOrArr = objOrArr instanceof Array ? [] : {}
if (type === 'arr') {
newObjOrArr = JSON.parse(JSON.stringify(objOrArr))
} else {
for (var key in objOrArr) {
if (objOrArr.hasOwnProperty(key)) {
newObjOrArr[key] = typeof objOrArr[key] === 'object' ? deepCopy(objOrArr[key]) : objOrArr[key]
}
}
}
return newObjOrArr
}