美文网首页
JS 实现值复制

JS 实现值复制

作者: 元气满满321 | 来源:发表于2017-06-19 17:54 被阅读295次

    题目要求

    实现一个函数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的复制,这个最简单,直接返回就好

    有不懂的地方欢迎留言~

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


    相关文章

      网友评论

          本文标题:JS 实现值复制

          本文链接:https://www.haomeiwen.com/subject/dkfnqxtx.html