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

  1. 如果对象身上有属性值为时间对象的时候,会将时间对象改成以字符串形式显示
    例如:
    let obj1 = { age:1,time:new Date() }
    let obj2 = JSON.parse(JSON.stringify(obj1))
    console.log(obj2) //{age: 1, time: “2021-03-08T03:38:28.898Z”
  2. 如果对象身上有属性值为function、undefined的时候,拷贝出来的对象会没有这两个属性
    例如:
    let obj1 = { age:1,eat:() => {},name:undefined }
    let obj2 = JSON.parse(JSON.stringify(obj1))
    console.log(obj2) //{age: 1}
  3. 如果对象身上有属性值为NaN、Infinity和-Infinity的时候,会转换成null显示
    例如:
    let obj1 = { age:NaN,name:“张三” }
    let obj2 = JSON.parse(JSON.stringify(obj1))
    console.log(obj2) //{age: null, name: “张三”}
  4. 如果对象属性出现循环引用的话,也无法进行深拷贝
    例如:
    let obj = { age:18,name:“张三” }
    obj.obj = obj
    let obj2 = JSON.parse(JSON.stringify(obj))
    console.log(obj2) // 报错:Uncaught TypeError: Converting circular structure to JSON

你可能感兴趣的:(javascript)