JSON.parse(JSON.stringify(obj)) 实现深拷贝的问题

JSON.parse(JSON.stringify(obj)) 

 

生成的对象中,如果原值是一个regExp对象或者Date对象,regExp只会拷贝出{},Date只会拷贝出字符串

 

let obj = {

  a:1,

      b: new Date(),

      c: /[s]/

}

 

 

 

 

为了解决这个问题,要书写cloneDeep函数

 

function cloneDeep(obj) {
  let tmpObj
  let type = Object.prototype.toString.call(obj)
if (type === '[object Object]') {
   tmpObj = {}
 for (let i in obj) {
  tmpObj[i] = cloneDeep(obj[i])
  }
} else if (type === '[object Array]') {
  tmpObj = []
for (let i of obj) {
  tmpObj.push(cloneDeep(i))
}
} else if (type === '[object regExp]') {
  tmpObj = new regExp(obj)
} else if (type === '[object Date]') {
  tmpObj = new Date(obj)
} else {
  tmpObj = obj
}
  return tmpObj
}


let obj = { a: 1, b: 2, c: [1, 2, { f: 1 }], g: new Date(), k: /s/g }

const r = cloneDeep(obj)

console.log(r);
 

 

 

posted @ 2020-06-02 13:14  hh9515  阅读(269)  评论(0)    收藏  举报