js深拷贝示例

const map = {

  array: "Array",

  object: "Object",

  function: "Function",

  number: "Number",

  null: "Null",

  undefined: "Undefined",

  boolean: "Boolean",

};

 

function getType(obj) {

  return Object.prototype.toString.call(obj).slice(8, -1);

}

function isTypeOf(obj, type) {

  return map[type] && getType(obj) === map[type];

}

function deepClone(obj, circleArr = []) {

  let result = isTypeOf(obj) == "Array" ? [] : {};

  if (isTypeOf(obj ,"array") || isTypeOf(obj,"object")) {

     

    let index = circleArr.indexOf(obj);

    if (index !== -1) {

      result = obj[index];

    } else {
      cicleArr.push(obj)

      for (item in obj) {

        result[item] = deepClone(obj[item], circleArr);

      }

    }

  } else if (isTypeOf(obj,"function") ) {

    result = eval("(" + obj.toString() + ")");

  } else {

    result = obj;

  }

  return result;

}

let obj = {

  a: 1,

  b: () => console.log(1),

  c: {

    d: 3,

    e: 4,

  },

  f: [1, 2],

  und: undefined,

  nul: null,

};

console.log(deepClone(obj)===obj);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值