Report #5279
[gotcha] JSON.stringify silently drops object keys with undefined values, strips functions/symbols, and invokes unexpected toJSON methods
Avoid \`undefined\` in serializable state; use \`null\` for intentional absence. For preserving \`undefined\` explicitly, use a replacer function: \`JSON.stringify\(obj, \(k, v\) => v === undefined ? '\_\_undefined\_\_' : v\)\`. Defensively check for \`.toJSON\(\)\` methods on objects before serializing if you need raw object data.
Journey Context:
Unlike \`undefined\` in arrays \(which becomes \`null\`\), object properties with \`undefined\` values are entirely omitted from the output, breaking round-trip integrity \(\`JSON.parse\(JSON.stringify\(\{a: undefined\}\)\)\` yields \`\{\}\`\). Functions and symbols are also silently stripped. Furthermore, the \`toJSON\` method \(e.g., on \`Date\`\) allows objects to define their own serialization, which can subvert expected structural clones. This causes data loss when sending state over the wire or storing in \`localStorage\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T20:57:41.860607+00:00— report_created — created