今日面试题~深浅拷贝的概念,实现的方法

58 阅读1分钟

深拷贝和浅拷贝

数据拷贝是针对引用类型的。分为浅拷贝和深拷贝。

  • 浅拷贝概念:引用类型中包含引用类型,新数据和原数据不共用地址了,但是其中包含的引用类型还会共用内存地址。

    • 数组实现浅拷贝的方法:

      1. 遍历将每个元素放在新数组中

      2. 数组.slice()

      3. 数组.concat()

      4. [...数组]

    • 对象实现浅拷贝的方法:

      1. 遍历将每个键值对放在新对象中

      2. Object.assign(新对象, 旧对象)

      3. {...对象}

    - 深拷贝概念:新数据和原数据不共用地址了,其中包含的引用类型也不共用地址了
    
    • 深拷贝实现:
    JSON.parse(JSON.stringify(原数据))
    
    手动封装的递归:
    
        function deepCopy(data) {
            if(Object.prototype.toString.call(data) === '[object Object]'){
                var newData = {}
            } else if(Object.prototype.toString.call(data) === '[object Array]'){
                var newData = []
            } else{
                return data
            }
            for(var key in data){
                if(typeof data[key] === 'object'){
                   newData[key] = deepCopy(data[key])
                } else {
                    newData[key] = data[key]
                }
            }
            return newData
        }