【发布时间】:2021-04-22 04:53:28
【问题描述】:
谁能解释一下 Javascript 中 JSON.parse() 函数的这种奇怪行为?
当用字符串调用它时,它应该会引发错误。
例如
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 认为这是一种浮动?
【问题讨论】:
-
很可能是因为 10e6 类型的字符串是一个有效的数值,因为它表示 10 的 6 次幂。但 d 或 f 在这里没有有效意义。因此 JSON 解析将第二种情况视为 js 中的有效数字,因此这种行为
-
是的。 JSON 支持电子符号数字(例如
1e3 == 1000),第二个输入匹配general pattern for them。不过,指数 130012727947 太大而无法容纳 64 位浮点数,因此默认为 Infinity。 -
在您的情况下,数字太大而无法表示为数值,因此为避免溢出错误,它被转换为 INFINITY ,这是 js 中的最大值
-
"5ffc58ed1662010012d45b30"这是无效的 JSON。类型无效json.org/json-en.html -
问题中提供的 JSON 中没有任何字符串。
标签: javascript json infinity