如何解决JavaScript JSON.parse 字符串错误 - 将值转换为 Infinity
谁能解释一下 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
认为这是一种浮动?
解决方法
JSON 是相同数据的文本表示,通常是像数组或对象这样的结构,但像字符串或数字这样的原始值也可以毫无问题地表示为 JSON。
作为文本,在源代码中它表示为 JavaScript 字符串。
行:
JSON.parse("60000528880e130012727947");
也可以是 JSON.parse(x)
,其中 x
是一个包含 JSON 的变量。
上面示例中的 JSON 正是这样:60000528880e130012727947
(它周围没有引号,引号是 JavaScript 源代码中文本的表示方式)。更准确地说,它是实数 60,000,528,880 * 10^130,012,727,947
的文本表示。
JavaScript 使用 double-precision 64-bit binary format IEEE 754 来表示数字。 Number 可以容纳的最大值约为 1.8×10^308
,这对于大多数实际用途而言非常有用。但是,与您表示为 JSON 的值相比,它是一个很小的值。
无论如何,不管它有多大,由于存储为 JSON 的值大于使用 64 位双精度格式可以表示的最大值,因此使用 Infinity
代替。
关于另一个示例,5ffc58ed1662010012d45b30
不是数字的有效表示,因此 JSON 解析器在到达索引 f
处的第一个 1
字符时会抛出错误。>
总而言之,JSON.parse()
工作正常,您的输入并不总是有效的 JSON。
基本上是将第二个字符串视为一个大数字
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。