JSON.stringify做深拷贝的问题

19 min read

Date对象拷贝后数据类型变成字符串

let obj = {
    d: new Date(),
};
console.log(JSON.stringify(obj));
// {d: "2020-08-12T04:47:40.958Z"}

正则对象、Error对象拷贝后变成空对象

let obj = {
    r: /\d+/gi,
    e: new Error('an error')
};
console.log(JSON.stringify(obj));
// {r: {}, e: {}}

对象里面的函数和undefined属性、Symbol值拷贝后属性丢失

let obj = {
    f: console.log,
    u: undefined
    s: Symbol("foo")
};
console.log(JSON.stringify(obj));
// {}

NaN、Infinity、-Infinity拷贝后变为null

let obj = {
    i: Infinity,
    l: -Infinity,
    n: NaN,

};
console.log(JSON.stringify(obj));
// {i: null, l: null, n: null}

特殊数据报错

这个简单的说就是如果对象中有环的话话就会报错,最简单的例子就是

console.log(JSON.parse(JSON.stringify(window)));