JSON.stringify and symbols
# Mark S. Miller (11 years ago)
JSON.stringify also skips function-valued properties, which seems even more weird. I think this is fine as long as it can be overridden by replacers and resolvers.
# Frankie Bagnardi (11 years ago)
It also skips explicit undefined values. Basically, if there's no good JSON representation of something, it pretends it doesn't exist.
You can also get this behavior by doing obj.toJSON = () => undefined
example fiddle
In all of those cases symbols behave as if they were the value undefined
,
or an object with a toJSON which returns undefined.
As specified in the latest draft:
JSON.stringify(symbol)
returnsundefined
.JSON.stringify([symbol])
returns"[null]"
.JSON.stringify(object)
skips any symbol-keyed properties on the object.So far, so good, I guess. A little wonky maybe, but JSON doesn't have symbols, so sure.
This struck me as funny though:
4.
JSON.stringify(object)
also skips symbol-valued properties.That is,
JSON.stringify({"x": Symbol()}) == "{}"
. I don't know that there's anything more useful it should be doing instead. Thoughts?