繁体   English   中英

JavaScript JSON.parse 字符串错误 - 将值转换为无穷大

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM