知道为什么 JSON 会忽略 NaN 和 +/- Infinity 吗?它将 Javascript 置于一种奇怪的情况下,如果对象包含 NaN 或 +/- 无穷大值,则本来可以序列化的对象却不是。
看起来这是一成不变的:见 RFC4627和 ECMA-262 (第 24.5.2 节,JSON.stringify,注 4,ECMA-262 pdf 的第 683 页最后一次编辑):
Finite numbers are stringified as if by calling
ToString(number)
. NaN and Infinity regardless of sign are represented as the Stringnull
.
最佳答案
Infinity
和 NaN
不是关键字或任何特殊的东西,它们只是全局对象上的属性(就像 undefined
一样)和这样可以改变。正是因为这个原因,JSON 没有将它们包含在规范中——本质上,如果你执行 eval(jsonString)
或 JSON.parse( jsonString)
.
如果允许,那么有人可以注入(inject)类似于
的代码NaN={valueOf:function(){ do evil }};
Infinity={valueOf:function(){ do evil }};
进入论坛(或其他),然后该网站上的任何 json 使用都可能受到损害。
关于javascript - JSON 省略了 Infinity 和 NaN; ECMAScript 中的 JSON 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1423081/