深度拷贝数据

//深拷贝数据
export function deepCopy(data) {
    //string,number,bool,null,undefined,symbol
    //object,array,date
    if (data && typeof data === 'object') {
        //针对函数的拷贝
        if (typeof data === 'function') {
            let tempFunc = data.bind(null)
            tempFunc.prototype = deepCopy(data.prototype)
            return tempFunc
        }

        switch (Object.prototype.toString.call(data)) {
            case '[object String]':
                return data.toString()
            case '[object Number]':
                return Number(data.toString())
            case '[object Boolean]':
                return Boolean(data.toString())
            case '[object Date]':
                return new Date(data.getTime())
            case '[object Array]':
                let arr = []
                for (let i = 0; i < data.length; i++) {
                    arr[i] = deepCopy(data[i])
                }
                return arr

            //js自带对象或用户自定义类实例
            case '[object Object]':
                let obj = {}
                for (let key in data) {
                    //会遍历原型链上的属性方法,可以用hasOwnProperty来控制 (obj.hasOwnProperty(prop)
                    obj[key] = deepCopy(data[key])
                }
                return obj
        }
    } else {
        //string,number,bool,null,undefined,symbol
        return data
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值