- Атрибут типа даты будет преобразован в строку
const obj = { date:new Date() } typeof obj.date === 'object' //true const objCopy = JSON.parse(JSON.stringify(obj)); typeof objCopy.date === string; //true
Затем вы будете удивлены, обнаружив, что getTime() не может быть вызвана, и getYearFull() также не может быть вызвана. Встроенные методы всех типов времени недоступны. Однако встроенные методы строкового типа полностью доступны.
2. Неопределенный тип и тип функции будут удалены напрямую
const obj = { undef: undefined, fun: () => { console.log('hello world') } } console.log(obj,"obj"); const objCopy = JSON.parse(JSON.stringify(obj)); console.log(objCopy,"objCopy") // Both under and fun are missing
3. NaN и Infinity будут преобразованы в null
const obj = { nan:NaN, infinityMax:1.7976931348623157E+10308, infinityMin:-1.7976931348623157E+10308, } console.log(obj, "obj"); const objCopy = JSON.parse(JSON.stringify(obj)); console.log(objCopy,"objCopy") // All attribute will be null
4. В случае циклической ссылки будет выдана ошибка
const obj = { objChild:null } obj.objChild = obj; const objCopy = JSON.parse(JSON.stringify(obj)); // Error thrown here console.log(objCopy,"objCopy")
В некоторых случаях вам будет очень удобно выполнять глубокое копирование объекта с помощью JSON.parse(JSON.stringify(obj)). Тем не менее, это не всегда так. На подходе еще одна история, которая поможет вам с глубокой копией объекта в javascript. Спасибо за чтение.