首页 > Web开发 > 详细

js对象的深拷贝

时间:2021-06-09 09:44:39      阅读:23      评论:0      收藏:0      [点我收藏+]

1.JSON.stringfy()和JSON.parse()

但是这种方法有其局限性,当值为undefinedfunctionsymbol 会在转换过程中被忽略

var copy = JSON.parse(JSON.stringify(obj))

  

2. 递归函数

function deepCopy(obj) {
      var result = Array.isArray(obj) ? [] : {};
      for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
          if (typeof obj[key] === ‘object‘ && obj[key]!==null) {
            result[key] = deepCopy(obj[key]);   //递归复制
          } else {
            result[key] = obj[key];
          }
        }
      }
      return result;
    }

 

 1 function deepClone (obj) {
 2     if (obj === null) return null
 3     if (typeof obj !== ‘object‘) return obj;
 4     if (obj.constructor === Date) return new Date(obj);
 5     var newObj = new obj.constructor();  //保持继承链
 6     for (var key in obj) {
 7         if (obj.hasOwnProperty(key)) {   //不遍历其原型链上的属性
 8             var val = obj[key];
 9             newObj[key] = typeof val === ‘object‘ ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
10         }
11     }
12     return newObj;
13 }

 

js对象的深拷贝

原文:https://www.cnblogs.com/zhijianzhizhen/p/14849222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!