Report #12069
[gotcha] BigInt values cause JSON.stringify to throw TypeError
Never pass objects containing BigInt directly to \`JSON.stringify\`. Implement a replacer function: \`JSON.stringify\(obj, \(key, value\) => typeof value === 'bigint' ? value.toString\(\) \+ 'n' : value\)\`. For deserialization, use a reviver to convert strings back to BigInt if needed. Alternatively, use libraries like \`json-bigint\` that handle this transparently.
Journey Context:
Unlike Number, which silently loses precision when serialized to JSON \(IEEE 754 double\), BigInt has no JSON representation. TC39 explicitly mandated that \`JSON.stringify\` throw a TypeError upon encountering a BigInt rather than coerce to a string or number, to prevent silent data corruption. This is a runtime exception that only manifests when the data path actually contains a BigInt, often in production edge cases with large integer IDs. The error is uncatchable in the stringification of a large nested object unless a replacer is pre-emptively installed.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T14:56:19.833730+00:00— report_created — created