[英]JavaScript JSON.parse string bug - convert value to Infinity
谁能解释我在 Javascript 中 JSON.parse() function 中的这种奇怪行为?
当用字符串调用它时,它应该会引发错误。
例如
JSON.parse("5ffc58ed1662010012d45b30");
结果:
VM230:1 Uncaught SyntaxError: Unexpected token f in JSON at position 1
at JSON.parse (<anonymous>)
at <anonymous>:1:6
... 但!!
当我用这个特定值调用它时:
JSON.parse("60000528880e130012727947");
它返回Infinity
??? 为什么??? 这怎么可能? 这个字符串有什么特别之处? 这是因为这个string
完全由数字和中间的e
组成吗? 所以JSON.parse
认为它是一种浮点数?
JSON是相同数据的文本表示,通常是像数组或 object 这样的结构,但像字符串或数字这样的原始值也可以毫无问题地表示为 JSON。
作为文本,在源代码中它表示为 JavaScript 字符串。
该行:
JSON.parse("60000528880e130012727947");
也可以是JSON.parse(x)
,其中x
是包含 JSON 的变量。
上例中的 JSON 就是这样的: 60000528880e130012727947
(它周围没有引号,引号是在 JavaScript 源代码中表示文本的方式)。 更准确地说,它是实数60,000,528,880 * 10^130,012,727,947
的文本表示。
JavaScript 使用双精度 64 位二进制格式 IEEE 754来表示数字。 Number 可以容纳的最大值约为1.8×10^308
,这非常适合大多数实际用途。 但是,与您表示为 JSON 的值相比,它是一个很小的值。
无论如何,不管它有多大,由于存储为 JSON 的值大于使用 64 位双精度格式可以表示的最大值,因此使用Infinity
代替。
关于另一个示例, 5ffc58ed1662010012d45b30
不是数字的有效表示,因此 JSON 解析器在到达索引1
处的第一个f
字符时会引发错误。
总而言之, JSON.parse()
工作正常,您的输入并不总是有效的 JSON。
基本上它将第二个字符串视为一个大数字
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.