美文网首页
浅拷贝 &&深拷贝

浅拷贝 &&深拷贝

作者: HelloAndyZhang | 来源:发表于2018-08-17 16:05 被阅读0次

B对象复制了A对象,当修改A对象时,看B对象是否会发生变化,如果B对象也跟着变了,说明这是浅拷贝。,如果B对象没变,那就是深拷贝。

浅拷贝

  1. 普通函数
function shallowClone (source){
     if(!source || typeof source != 'object'){
         throw new Error ('error');
     }
     let targetObj = source.constructor === Array ? [] : {};
     for(let keys in source) {
         if(source.hasOwnProperty(keys)){
             targetObj[keys] = source[keys];
         }
     }
     return targetObj
}
let obj ={
    name:"zhang",
    age:16,
    sex:"men",
    friends:["wang","zhang","li"]
}
let obj2 = shallowClone(obj)
obj2.friends.push("tan")
console.log(obj2) //{name: "zhang", age: 16, sex: "men", friends: ["wang", "zhang", "li", "tan"]}
console.log(obj)  //{name: "zhang", age: 16, sex: "men", friends: ["wang", "zhang", "li", "tan"]}

  1. 使用ES6的Object.assign浅拷贝
let obj ={
    name:"zhang",
    age:16,
    sex:"men",
    friends:["wang","zhang","li"]
}
let obj2 = Object.assign({}, obj);
obj2.friends.push("tan")
console.log(obj)
console.log(obj2)

深拷贝

let obj1 = {
         arr: [1, 2, 3],
         obj: {
             key: 'value'
         },
         func:function(){
             return 1;
         }
    };
    let tar={}
    function copy(selfObj,targetObj ={}){
        for (let name in selfObj){
            if(typeof selfObj[name] === "object"){  // 判断对象下的属性是对象(数组)还是普通value
                targetObj[name] = (selfObj[name].constructor == Array) ? []:{};// 判断是数组还是对象
                copy(selfObj[name],targetObj[name]); // 递归调用克隆对象下的对象
            }else{
                targetObj[name] = selfObj[name] // 如果不是对象,直接把值赋给目标对象。
            }

        }
        return targetObj
    }
    obj2 = copy(obj1)
    console.log(obj2 == obj1)

相关文章

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • 2018-10-10day9函数基础

    1.浅拷贝、深拷贝 copy.copy(对象):浅拷贝copy.deepcopy(对象):深拷贝""" """拷贝...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • 深拷贝和浅拷贝

    1.深拷贝:地址的拷贝 2.浅拷贝:是值得拷贝 深拷贝和浅拷贝的区别 A拷贝B B变A变是浅拷贝 A拷贝B B变A...

  • 对象深拷贝和浅拷贝

    浅拷贝 深拷贝 深拷贝的递归方法 深拷贝的JSON方法

网友评论

      本文标题:浅拷贝 &&深拷贝

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