Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

This is presented in the linked document with the following context-specific gotchas:

> Unfortunately, this method only works when the source object contains serializable value types and does not have any circular references. An example of a non-serializable value type is the Date object - it is printed in a non ISO-standard format and cannot be parsed back to its original value :(.



That's false. If you use JSON.stringify on an object, it will call the method toJSON of each values recursively. The toJSON method of a Date returns the ISO string.

source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...


But JSON.parse will leave it as a string instead of converting it back to a date, so this cloning approach doesn't work for objects containing dates.


I did not say that JSON.parse would parse the dates.

I'm saying that the article is wrong when it says that JSON.stringify does not transform Dates into ISO string.

Right after that, the article says "cannot be parsed back to its original value" when it definitely can be parsed back. JSON.parse does not do it by default but that was never his point.


> Right after that, the article says "cannot be parsed back to its original value" when it definitely can be parsed back. JSON.parse does not do it by default but that was never his point.

The broader point, which is entirely correct, is that you don't get back an exact copy of the object you want to clone, because the date fields don't end up being the same type.


JSON.parse of an ISO string yields a string, not a date.

let d = new Date(); let s = JSON.parse(JSON.stringify(d));

s will not be a clone of d.


I never said that JSON.parse yields a date by default. But it can.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

The article says it does not return a ISO string. I'm saying it does. The author as agreed with me and will update the article.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: