Накратко
JSON не представя всеки JavaScript тип без преобразуване.
Полезно е да знаеш
JSON.stringify() превръща подходяща JavaScript стойност в JSON текст. При свойство със стойност undefined полето може да бъде пропуснато: JSON.stringify({a: 1, b: undefined}) дава '{"a":1}'. При масив undefined се представя като null. [1]
Затова сериализирането не е универсално дълбоко копие на произволно състояние. Функции, циклични връзки и други типове имат ограничения. Преди запис определи схема с допустимите данни и провери загубите. Текстът, който изглежда валиден JSON, може все пак да не съдържа всички свойства, които приложението е очаквало.
Източници
За повече подробности и проверка на информацията: