美文网首页
前端面试js篇:利用js实现深拷贝

前端面试js篇:利用js实现深拷贝

作者: 5cc9c8608284 | 来源:发表于2024-03-28 09:35 被阅读0次
    function deepCopy(obj) {
      // 如果不是对象,则直接返回
      if (typeof obj !== 'object' || obj === null) {
        return obj;
      }
    
      // 处理Date, RegExp, Function等特殊类型
      if (obj instanceof Date) {
        return new Date(obj);
      }
      if (obj instanceof RegExp) {
        return new RegExp(obj);
      }
      if (typeof obj.clone === 'function') {
        // 如果对象有clone方法,尝试调用该方法进行克隆
        return obj.clone();
      }
    
      // 创建目标对象实例
      let cloneTarget;
      if (Array.isArray(obj)) {
        cloneTarget = [];
      } else {
        cloneTarget = {};
      }
    
      // 遍历对象的每个属性
      for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
          // 递归复制属性
          cloneTarget[key] = deepCopy(obj[key]);
        }
      }
    
      // 返回复制后的对象
      return cloneTarget;
    }
    
    // 使用示例
    const originalObj = {
      a: 1,
      b: {
        c: 2,
        d: [3, 4]
      },
      e: new Date(),
      f: function() { console.log('hello'); }
    };
    
    const copiedObj = deepCopy(originalObj);
    console.log(copiedObj===originalObj,'copiedObj');
    

    相关文章

      网友评论

          本文标题:前端面试js篇:利用js实现深拷贝

          本文链接:https://www.haomeiwen.com/subject/azmstjtx.html