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
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值