JSON.parse(JSON.stringify(data))无法实现的地方

379 阅读1分钟

1,如果对象中存在循环引用的情况也无法正确实现深拷贝。

const a = {
  b:1
}
a.c=a
console.log(JSON.parse(JSON.stringify(a)))

2,如果 data 里面有时间对象,则JSON.stringify后再JSON.parse的结果,时间将只是字符串的形式。而不是时间对象。

const a = {
  b:new Date(1231478256728)
}
console.log(JSON.parse(JSON.stringify(a)))

3,如果 data 里有RegExp、Error对象,则序列化的结果将只得到空对象;

const a = {
    b: new RegExp(/\d/),
    c: new Error('错误')
}
console.log(JSON.parse(JSON.stringify(a)))

4,如果 data 里有函数,undefined,则序列化的结果会把函数置为undefined或丢失;

const a = {
    b: function (){
        console.log(1)
    },
    c:1,
	d:undefined
}
console.log(JSON.parse(JSON.stringify(a)))

如果 data 里有NaN、Infinity和-Infinity,则序列化的结果会变成null

const a = {
    b: NaN,
    c: 1.7976931348623157E+10308,
    d: -1.7976931348623157E+10308,
}