深拷贝和浅拷贝

手写深拷贝

        function deepClone(target) {

            let result

            if (typeof target === 'object') {

                if (Array.isArray(target)) {

                    result = []

                    for (let i in target) {

                        result.push(deepClone(target[i]))

                    }

                } else if (target === null) {

                    result = target

                } else if (target.constructor === RegExp) {

                    result = target

                } else if (target.constructor === Date) {

                    result = target

                } else {

                    result = {}

                    for (let i in target) {

                        result[i] = deepClone(target[i])

                    }

                }

            } else if (typeof target === 'function') {

                // 如果是函数

                result = new Function('return ' + target.toString())

            } else {

                // 如果是基本数据类型,如number、string、boolean、undefined

                result = target

            }

            return result

        }

深拷贝

特点:拷贝的时候会生成一份新的数据,修改拷贝以后的数据不会原数据。

浅拷贝

特点:拷贝的时候只是拷贝了一份引用,修改拷贝以后的数据会影响原来的数据。

扩展运算符是深拷贝。

Array.prototype.slice()是深拷贝方式。

Array.prototype.concat()是深拷贝方式。

Object.assign()是浅拷贝方式

JSON.parse(JSON.stringify())是一种深拷贝方式。但需要注意拷贝的数据里面不能有函数,因为JSON.stringify(),JSON.parse()处理不了函数。

2.拷贝数据的方式:

(1)直接赋值给一个变量

(2)Object.assign() 浅拷贝

(3)Array.prototype.slice() 深拷贝

(4)Array.prototype.concat() 深拷贝

(5)JSON.parse(JSON.stringify()) 深拷贝

(6)Loadsh库中的API,如:.clone()、.cloneDeep()

(7)扩展运算符…arr 深拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值