Overcome JSON.stringify limitations.
uneval
is a function turning a JavaScript value into a string that can be evaluated.
It exists to overcome JSON.stringify
limitations.
But you should better use JSON.stringify
and avoid using uneval
at all.
However, if some JSON.stringify
limitations is a problem for you uneval
might be what you're looking for.
- Transforms regexp into
{}
JSON.stringify(/foo/) === "{}"
- Transforms
-0
into0
JSON.stringify(-0) === "0"
- Transforms
NaN
intonull
JSON.stringify(NaN) === "null"
- Transforms
Infinity
intonull
JSON.stringify(Infinity) === "null"
- Does not support circular structure
const value = {}
value.self = value
try {
JSON.stringify(value)
} catch (error) {
error.name === "TypeError"
}
- Transforms dates into strings
JSON.stringify(new Date(0)) === `"1970-01-01T00:00:00.000Z"`
- Is not optimized for repetitive structure
JSON.stringify(["very-long-string", "very-long-string"]) ===
`["very-long-string","very-long-string"]`
"very-long-string"
is repeated twice. It can becomes a waste if you use it to stringify very big structures.
- Ignores non enumerable properties
JSON.stringify(Object.defineProperty({}, "foo", { enumerable: false })) === "{}"
npm install --save-dev @dmail/uneval
See browser and node examples below.
<script src="https://unpkg.com/@dmail/[email protected]/dist/global/main.js"></script>
<script>
const { uneval } = window.__dmail_uneval__
console.log(eval(uneval({ answer: 42 })))
</script>
const { uneval } = require("@dmail/uneval")
console.log(eval(uneval({ answer: 42 })))