码迷,mamicode.com
首页 > Web开发 > 详细

js深拷贝

时间:2020-03-27 18:32:27      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:for   bsp   dex   exp   元素   并且   size   fun   深拷贝   

getType 函数获取函数类型

首先我们要实现一个getType函数对元素进行类型判断,直接调用Object.prototype.toString 方法。

 

function getType(obj){
       //tostring会返回对应不同的标签的构造函数
       const toString = Object.prototype.toString;
       const map = {
          ‘[object Boolean]‘  : ‘boolean‘, 
          ‘[object Number]‘   : ‘number‘, 
          ‘[object String]‘   : ‘string‘, 
          ‘[object Function]‘ : ‘function‘, 
          ‘[object Array]‘    : ‘array‘, 
          ‘[object Date]‘     : ‘date‘, 
          ‘[object RegExp]‘   : ‘regExp‘, 
          ‘[object Undefined]‘: ‘undefined‘,
          ‘[object Null]‘     : ‘null‘, 
          ‘[object Object]‘   : ‘object‘
      };
      if(obj instanceof Element) {
           return ‘element‘;
      }
      return map[toString.call(obj)];
   }

 

深拷贝(deepCopy)


对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个都会受到影响。当我们想复制一个对象并且切断与这个对象的联系,就要使用深拷贝。对于一个对象来说,由于可能有多层结构,所以我们可以使用递归来解决这个问题

  

function deepCopy (data) {
  let type = getType(data),
  o;
  if (type === ‘array‘) {
    o = [];
  } else if (type === ‘object‘) {
    o = {};
  } else {
    return data;
  }
  if (type === ‘array‘) {
    for (let index = 0; index < data.length; index++) {
      const element = data[index];
      o.push(deepCopy(element));
    
    }
  } else if (type === ‘object‘){
    for (const key in data) {
      if (data.hasOwnProperty(key)) {
        const element = data[key];
        o[key] = deepCopy(element);
      }
    }
  }
  return o;
}

  

  

js深拷贝

标签:for   bsp   dex   exp   元素   并且   size   fun   深拷贝   

原文地址:https://www.cnblogs.com/liuabo/p/12583172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!