ES6语法中 ...扩展运算符可以进行拷贝,但是这个拷贝可以说是深拷贝也可以是浅拷贝,在深层次的就无法拷贝
可以深拷贝的绝大部分(80%):但是无法拷贝undefined和function,当对象中有undefined类型或function类型的数据时 --- undefined和function会直接丢失
JSON.parse(JSON.stringify(obj))
标准的深拷贝 => 引用数据类型(数组、对象)
function deepClone(source) {
// [] => Array(基类) {} => Object
const targetObj = source.constructor === Array ? [] : {};
for (let keys in source) {
if(source.hasOwnProperty(kes)) {
// 引用数据类型有3种,一种基本类型,一种数组,一种对象 keys => 3
// 引用数据类型
if(source[keys] && typeof source[keys] === 'object'){
targetObj[keys] = source[keys].uonstructor === Array ? [] : {}
// 递归
targetObj[keys] = deepClone(source[keys])
}else{
// 基本数据类型,直接赋值
targetObj[keys] = source[keys]
}
}
}
return targetObj
}