js有六种数据类型:五种基本数据类型:String、Number、Boolean、Undefined、Null 和一种复杂数据类型(Object)。 typeof 返回的数据类型: String、Number、Boolean、Undefined、Object、Function
//1.定义检测数据类型的功能函数
function checkType(target) {
return Object.prototype.toString.call(target).slice(8, -1);
}
//2.实现深度克隆
function clone(target) {
let result;
let targetType = checkType(target);
if (targetType === 'Object') {
result = {};
} else if (targetType === 'Array') {
result = [];
}else {
return target;
}
//3.遍历目标数据
for (let i in target) {
let value = target[i];
//4.判断目标结构里的每一值是否存在对象/数组
if(checkType(value) === 'Object'||checkType(value) === 'Array'){
//对象或者数组里嵌套了对象或者数组
//5.继续遍历获取到的value值
result[i] = clone(value);
}else {
result[i] = value;
}
}
return result;;
}
let arr3 = [1,2,3,{
userName:'xsx',
age:18,
wife:['wife1','wife2','wife3'],
success:function () {
console.log('okok')
}
}]
let arr4 = clone(arr3);
arr4[3].userName = 'LY';
console.log(arr3);
console.log(arr4);
效果: