克隆
克隆考虑基本数据类型、对象以及数组的克隆
常见浅拷贝的方式:Object.assign()、扩展运算符
浅克隆
function clone(option) {
//判断是否是数组
if(Array.isArray(option)) {
return option.slice() //相当于拷贝了数组
} else if(typeof option == "object"){ //判断是否是对象
return Object.assign({},option)
} else{ //基础数据类型的克隆
return option
}
}
深克隆
当一个对象中层层嵌套多个对象时,浅克隆就只能克隆地址了。需要用到递归的方法将对象或数组进行深克隆
function clone(option, deep) {
//判断是否是数组
if (Array.isArray(option)) {
var newArr = [];
if (deep) {
for (let i = 0; i < option.length; i++) {
newArr.push(clone(option[i], deep));
}
return newArr
} else {
return option.slice();
}
} else if (typeof option == "object") {
//判断是否是对象
var newObj = {};
for (const prop in option) {
if (deep) {
newObj[prop] = clone(option[prop], deep); //递归调用克隆
} else {
newObj[prop] = option[prop];
}
}
return newObj;
} else {
//基础数据类型的克隆
return option; //递归出口
}
}