• 第71天 [js] 写一个方法,实现深浅拷贝


    //[js] 写一个方法,实现浅拷贝
    
    //浅拷贝 assign
    var a = {
        name: 'zhangsan',
    };
    var b = Object.assign({}, a);
    b.name = 'lisi';
    console.log(a.name);//zhangsan
    //但是如果拷贝的源对象当中包含对象时,OBject.assign()方法只会拷贝对象的引用地址,而不会拷贝对象的属性值
    var c = {
        name: 'zhangsan',
        age: 18,
        address: {
            city: 'beijing',
            street: 'xizhimen'
        }
    };
    var d = Object.assign({}, c);
    d.name = 'lisi';
    d.address.city = 'shanghai';
    console.log(c.name);//zhangsan
    console.log(c.address.city);//shanghai
    
    
    
    //[js] 写一个方法,实现深拷贝
    //如果要拷贝的对象中包含对象,就需要深拷贝了,一般使用原生的方法JSON.parse(JSON.stringify(obj))
    
    var j1={
        value: 'a',
        obj3:{
            value2: 'c'
        },
        arr:[1,2,3]
    }
    var obj2 = JSON.parse(JSON.stringify(obj1));
    obj2.obj3.value2='b';
    obj2.arr[0]= "a";
    console.log(obj2);//{ value: 'a', obj3:{ value2: 'b' }, arr:['a',2,3] }
    console.log(obj1);//{ value: 'a', obj3:{ value2: 'c' }, arr:[1,2,3] } 没有发生改变
    
    //实现一个对数组和对象的深拷贝的方法
    var obj={
        name: 'znl',
        age: 18,
        friend:{
            name: 'borys',
            age: 20
        },
        arr:[1,2,[3,4]]
    }
    
    function copy(obj){
        var type=Object.prototype.toString.call(obj);
        if(!(type == '[object Array]' || type == '[object Object]')){
            return 'Type Error!';
        }
        return JSON.parse(JSON.stringify(obj));
    }
    
    var obj2= copy(obj);
    console.log(obj.friend === obj2.friend)//false
    console.log(obj.arr === obj2.arr)//false
    

      

  • 相关阅读:
    2003系统IIS上传文件不能超过200K的解决方案
    ASP从编辑框中获取图片路径
    ASP 编码转换大全 UTF8、GB2312、二进制、十进制代码、十六进制
    解决IE6、IE7、IE8样式不兼容问题
    py2exe setup.py
    Python to 2bit
    python访问ACCESS
    Pamie Web自动化
    Perl 笔记
    常用工具全盗版 汗颜了
  • 原文地址:https://www.cnblogs.com/DIVEY/p/15958179.html
Copyright © 2020-2023  润新知