浅拷贝与深拷贝
一.浅拷贝
//浅拷贝
        var obj = {
            id: 20,
            name: 'Tom',
            age: 18,
            msg: {
                sex: '男'
            }
        };
        var newObj = {};
        //方法一:利用for in循环进行浅拷贝
        // for (var k in obj) {
        //     newObj[k] = obj[k]
        // }
        //console.log(newObj);
        //方法二:利用es6的新方法
        Object.assign(newObj, obj);
        console.log(newObj);
注意:由于是浅拷贝,所以对于msg方法而言,此时只是拷贝了其地址,如果修改了其信息,两者都会发生变化;简单点来说,就是假设B复制了A,当修改A时,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
二.深拷贝
var obj = { id: 20, name: 'Tom', age: 18, msg: { sex: '男' }, color: ['pink', 'red'] }; var o = {}; //封装函数 function deepCopy(newObj, oldObj) { for (var k in oldObj) { //判断属性值为哪种数据类型/获取属性值 var item = oldObj[k]; //判断这个属性值是否为数组 if (item instanceof Array) { newObj[k] = []; deepCopy(newObj[k], item) } else if (item instanceof Object) { //判断这个属性值是否为对象 newObj[k] = {}; deepCopy(newObj[k], item) } else { //属于简单数据类型 newObj[k] = item; } } }; deepCopy(o, obj); console.log(o);
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号