题目要求
实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
代码
function clone(data){
if(Array.isArray(data)){
//引用数据类型:Array
let newArr = [];
for(let i in arr){
newArr[i] = clone(data[i]);
}
return newArr;
}else if(data instanceof Object) {
//引用数据类型:Object
let newObj = {};
for(let key in data){
newObj[key] = clone(data[key]);
}
return newObj;
}else{
//基础数据类型
return data;
}
}
代码分为三种情况
1.Object的复制“
//复制对象obj
const obj = {name: 'yujuan',hobbies:{outgoing:"play",indoor:"sing"}};
2.Array的复制:
//复制数组arr
const arr = [1,2,3,4];
这两种情况中为什么要递归调用clone()函数呢,是为了避免直接复制引用,举个例子
let obj1 = new Object();
let obj2 = obj1;
obj1.name = "Mary";
alert(obj2.name);//"Mary"
首先,obj1保存了对象的一个新实例,然后这个值被复制到obj2中,那么此时obj2就和obj1指向堆内存的同一个对象
所以我们不能直接复制引用,而是应该新建一个空对象,然后将值复制给空对象,切记不是复制引用。
3.基础数据类型比如Number、String、Boolean的复制,这个最简单,直接返回就好
有不懂的地方欢迎留言~
每天都努力一点点
谢谢你看完