深拷贝

85 阅读1分钟

一、什么是深拷贝

深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型

二、深拷贝具体有哪些方法

1. 使用JSON.stringify()以及JSON.parse()

优点:此方法代码简洁

缺点:不能拷贝undefined、function这些类型的属性

       2. 递归

function deepCopy (obj) {
  if (obj && typeof obj === 'object') {
    var target = Array.isArray(obj) ? [] : {}
    for (k in obj) {
      if (obj.hasOwnProperty(k)) {
        target[k] = obj[k] && typeof obj[k] === 'object' ? deepCopy(obj[k]) : obj[k]
      }
    }
    return target
  } else {
    return obj
  }
}

优点:能拷贝undefined、function这些类型的属性