// 1. Date对象会变成字符串格式
let aa = {a: new Date()}
let bb = JSON.parse(JSON.stringify(aa))
console.log(aa)
// {a: Fri Mar 13 2020 18:26:03 GMT+0800 (中国标准时间)}
console.log(bb)
// {a: "2020-03-13T10:26:03.567Z"}
// 2. 函数会丢弃
let aa = {name: 'MuYi086', width: function () {}}
let bb = JSON.parse(JSON.stringify(aa))
console.log(aa)
// {name: "MuYi086", width: ƒ}
console.log(bb)
// {name: "MuYi086"}
// 3.NaN、Infinity、-Infinity会变成null
let aa = {a: NaN, b: Infinity, c: -Infinity, name: 'MuYi086'}
let bb = JSON.parse(JSON.stringify(aa))
console.log(aa)
// {a: NaN, b: Infinity, c: -Infinity, name: "MuYi086"}
console.log(bb)
// {a: null, b: null, c: null, name: "MuYi086"}
// 4.RegExp、Error对象会变成{}
let aa = {name: 'MuYi086', date: new RegExp('/d+/ig'), day:new Error('gg')}
let bb = JSON.parse(JSON.stringify(aa))
console.log(aa)
// {name: "MuYi086", date: //d+/ig/, day: Error: gg at <anonymous>:1:59}
console.log(bb)
// {name: "MuYi086", date: {}, day: {}}
// 5.丢失对象的constructor
function Person (name) {
this.name = name
}
let zz = new Person('MuYi086')
let yl = {nick: 'og', label: zz}
let copyed = JSON.parse(JSON.stringify(yl))
console.log(yl)
// {nick: "og", label: Person} label: Person {name: "MuYi086"}
console.log(copyed)
// {nick: "og", label: {name: "MuYi086"}}