JSON.parse、JSON.stringify深拷贝数据丢失问题(使用JSON深拷贝有哪些弊端)

一个数组添加属性,深拷贝之后添加的数据丢失
image
image

当数组添加一个对象,这个对象是不可枚举属性,使用JSON进行深拷贝,会丢失这个属性

使用JSON.parse(JSON.stringify())进行深拷贝 有哪些弊端

  • 如果obj里有函数,undefined,则序列化的结果会把函数, undefined丢失。
  • 如果obj里面存在时间对象,JSON.parse(JSON.stringify(obj))之后,时间对象变成了字符串。
  • 如果obj里有NaN、Infinity和-Infinity,则序列化的结果会变成null。
  • JSON.stringify()只能序列化对象的可枚举的自有属性。如果obj中的对象是有构造函数生成的,则使用JSON.parse(JSON.stringify(obj))深拷贝后,会丢弃对象的constructor。如果对象中存在循环引用的情况也无法正确实现深拷贝。
  • 如果obj里有RegExp、Error对象,则序列化的结果将只得到空对象。
function Person (name) {
    this.name = 18
}

const xiaoming = new Person('xiaoming')

var a = {
    data0: '1',
    date1: [new Date('2022-09-19'), new Date('2022-09-20')],
    data2: new RegExp('\\w+'),
    data3: new Error('1'),
    data4: undefined,
    data5: function () {
        console.log(1)
    },
    data6: NaN,
    data7: xiaoming
}
var b = JSON.parse(JSON.stringify(a))

image

posted @ 2022-09-19 10:48  嘿!那个姑娘  阅读(2122)  评论(0编辑  收藏  举报