美文网首页
js深拷贝

js深拷贝

作者: li好孩子 | 来源:发表于2018-12-26 11:30 被阅读13次

    深拷贝和浅拷贝在开发中我们会经常使用,特别是在面试过程中会被经常提起,简单来说

    浅拷贝:就是对引用的拷贝(还是指向同一内存地址)
    深拷贝:就是对整个内容的拷贝(完全不同的内存地址)
    
    

    比如我们有一下对象,当我们把obj 赋值给obj1 时,如果我们增加 obj1 likes 内的元素个数,那么obj 中likes 也会相应进行修改,这有时不是我们想要的结果,此时就需要深拷贝来实现该功能

    var obj = {
    name: "lixiansheng",
    age: 27,
    likes: ["足球", "电视", "游戏"]
    }
    var obj1 = {
    
    }
    
    

    深拷贝实现,此时我们修改obj1 时就不会影响到obj 了

    • 1.创建对象,进行原属性的遍历
    • 2.使用hasOwnProperty筛选掉原型链上的属性
    • 3.使用typeof判断是否是object(考虑到null的情况出现),如果不是这直接赋值
    • 4.如果是object 则判断是数组还是对象
    • 5.进行递归
    //深拷贝
    function deepClone(origin, target) {
        var target = target || {},
            toStr = Object.prototype.toString,
            arrayStr = "[object Array]"
        for (var prop in origin) {
            if (origin.hasOwnProperty(prop)) {
                if (origin[prop] !== "null" && typeof(origin[prop]) == "object") {
                    if (toStr.call(origin[prop]) == arrayStr) {
                    target[prop] = []
                    } else {
                    target[prop] = {}
                    }
                    deepClone(origin[prop], target[prop])
                } else {
                   target[prop] = origin[prop]
                }
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:js深拷贝

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