JS 实现值复制

题目要求

实现一个函数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指向堆内存的同一个对象

JS 实现值复制_第1张图片

所以我们不能直接复制引用,而是应该新建一个空对象,然后将值复制给空对象,切记不是复制引用。

3.基础数据类型比如Number、String、Boolean的复制,这个最简单,直接返回就好

有不懂的地方欢迎留言~

每天都努力一点点
谢谢你看完


你可能感兴趣的:(JS 实现值复制)