JavaScript中的深克隆

本文探讨了JavaScript中深克隆的必要性,详细解释了深克隆与浅克隆的区别,以及如何通过递归方式实现深克隆,避免引用类型在克隆过程中对原数据的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是前端学习笔记的第八篇,对应的是web前端开发JavaScript精英课js的第23课时,this部分由于没什么难度,这里就直接就直接忽略了,直接写本课时的难点,深克隆


JavaScript和其他面向对象的语言一样,在克隆方面也一样有克隆引用类型会影响原数据的问题,因为引用类型复制复制的是内存地址指向,修改克隆体的引用类型数据时操作的数据与原数据地址相同,而所谓深克隆就是不断递归到是原始值类型为止,再复制

废话少说,直接上代码

<script>
        var deepClone = (function () {
           return function (origin,target) {
               var target = target || {};
               var toStr = Object.prototype.toString;
               var arrStr = '[object Array]';
               for (var prop in origin) {
                   // 如果对象的值为null,直接赋值就行
                   if ((origin[prop] !== null) && (typeof(origin[prop]) === 'object')) {
                       if (toStr.call(origin[prop]) === arrStr) {
                           target[prop] = [];
                       } else {
                           target[prop] = {};
                       }
                       arguments.callee(origin[prop],target[prop]);
                   } else {
                       target[prop] = origin[prop];
                   }
               }
               return target;
           };
        }());
</script>

 

最后来个精简版

<script>
        var deepclone = (function () {
            return function (origin) {
                var target = origin instanceof Array ? [] : {};
                for (var prop in origin) {
                    target[prop] = typeof(origin[prop]) === 'object' ? arguments.callee(origin[prop]) : origin[prop];
                }
                return target;
            };
        }());
<script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值