javascript - JSON 省略了 Infinity 和 NaN; ECMAScript 中

知道为什么 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 String null.

最佳答案

InfinityNaN 不是关键字或任何特殊的东西,它们只是全局对象上的属性(就像 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/

相关文章:

ios - 如何将 JSON 字符串反序列化为 NSDictionary? (适用于 iOS 5+)

python - 如何将网页中的 JSON 转换为 Python 脚本

php - json_encode() 转义正斜杠

jquery - TypeError : $. ajax(...) 不是函数?

python - 存储 Python 字典

python - 如何在 Python 中检查字符串是否是有效的 JSON?

javascript - 在 JavaScript 中将 JSON 字符串解析为特定的对象原型(pr

ios - 如何使用 NSJSONSerialization

javascript - 将对象字符串转换为 JSON

python - 将类实例序列化为 JSON