搜索

查看: 3167|回复: 11

[JavaScript] vue深拷贝的3种实现方式小结

[复制链接]
发表于 2023-5-4 11:51:14 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:51:14 3167 11 看全部
目录
  • 1、通过递归方式实现深拷贝
  • 2、JSON.parse(JSON.stringify(obj))
  • 3、jQuery的extend方法实现深拷贝
  • 拓展阅读
  • vue深拷贝的其他实现方式
  • 总结vue深拷贝的三种实现方式:1、通过递归方式实现深拷贝;2、JSON.parse(JSON.stringify(obj));3、jQuery的extend方法实现深拷贝。深拷贝:拷贝的是对象或者数组内部数据的实体,重新开辟了内存空间存储数据;浅拷贝:拷贝的是引用类型的指针,副本和原数组或对象指向同一个内存;

    1、通过递归方式实现深拷贝
    比较全面的深拷贝,缺点是较为繁琐
    function deepClone(obj) {
            var target = {};
            for (var key in obj) {
                    if (Object.prototype.hasOwnProperty.call(obj, key)) {
                            if (typeof obj[key] === 'object') {
                                    target[key] = deepClone(obj[key]);
                            } else {
                                    target[key] = obj[key];
                            }
                    }
            }
            return target;
    }
    2、JSON.parse(JSON.stringify(obj))
    满足一般使用场景,但无法实现对象中方法(fountion)的深拷贝
    let obj = {
            id: 1,
            name: '张三',
            age: 10,
    }
    let newObj = JSON.parse(JSON.stringify(obj))
    3、jQuery的extend方法实现深拷贝
    var array = [1,2,3,4];
    var newArray = $.extend(true,[],array); // true为深拷贝,false为浅拷贝
    拓展阅读
    vue深拷贝的其他实现方式
    1、Object.assign(obj1, obj2)
    只有一级属性为深拷贝,二级属性后就是浅拷贝
    let obj = {
            id: 1,
            name: '张三',
            age: 10,
    }
    let newObj = Object.assign({}, obj)
    2、扩展运算符
    只有一级属性为深拷贝,二级属性后就是浅拷贝
    var obj = {
        a: 1,
        b: 2
    }

    var obj1 = {…obj}
    3、数组使用数组方法进行深拷贝(concat、slice)
    只有一级属性为深拷贝,二级属性后就是浅拷贝,如[1,2,3,[1,2,3]]
    var arr1 = [1, 2, 3, 4]
    var arr2 = arr1.concat()
    var arr3 = arr1.slice(1)
    总结
    到此这篇关于vue深拷贝的3种实现方式的文章就介绍到这了,更多相关vue深拷贝实现方式内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-28 17:25:09 | 显示全部楼层
    123456865 2023-6-28 17:25:09 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    发表于 2023-6-28 17:34:43 | 显示全部楼层
    无人岛屿颈 2023-6-28 17:34:43 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-29 05:56:29 | 显示全部楼层
    风来时狂放 2023-6-29 05:56:29 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    发表于 2023-6-29 15:23:07 | 显示全部楼层
    丁侦球 2023-6-29 15:23:07 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-29 17:20:17 | 显示全部楼层
    我的苦恼冉 2023-6-29 17:20:17 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-29 18:43:04 | 显示全部楼层
    知足常乐77 2023-6-29 18:43:04 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-30 16:25:10 | 显示全部楼层
    胡37 2023-6-30 16:25:10 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-7-1 00:43:12 | 显示全部楼层
    尘埃416 2023-7-1 00:43:12 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-7-1 20:11:25 | 显示全部楼层
    素色流年783 2023-7-1 20:11:25 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛。
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表