我试图了解Infinity, -Infinity, NaN在JSON世界中是否有某种可移植性(StringNumericLiteral)。我知道Infinity, -Infinity, NaN在JSON中没有指定,我只是试图在不同语言之间找到一个共同点。最后,它应该与JavaScript兼容。
Infinity, -Infinity, NaN
knpiaxh11#
基于一些实验(F12在谷歌Chrome),我看到那些特殊的Number值的扩展如下:
Number
> Number("-Infinity") -Infinity
字符串同时:
> Number("-Inf") NaN
型我认为有两个候选者可以实现某种互操作性:
[NaN, Infinity, -Infinity]
["NaN", "Infinity", "-Infinity"]
型"NaN"是一个特殊的字符串,需要特别注意,因为任何无效的字符串都会在ECMAScript中返回NaN。
"NaN"
NaN
1条答案
按热度按时间knpiaxh11#
基于一些实验(F12在谷歌Chrome),我看到那些特殊的
Number
值的扩展如下:字符串
同时:
型
我认为有两个候选者可以实现某种互操作性:
[NaN, Infinity, -Infinity]
或["NaN", "Infinity", "-Infinity"]
个现在,如果我需要在不同的语言/框架中处理这个JSON文件。这是我今天观察到的(目标是生成的JSON在处理时不会触发异常):
| 语言|没有引号|With quotes|
| --|--|--|
| Node.js |0not supported|由于数字强制,|
| Python3| supported(allow_nan=True)|不受支持|
| System.Text.Json.JsonSerializer的|不受支持|1supported (AllowNamedFloatingPointLiterals)|
| System.Text.Json.JsonNode的|1not supported|不受支持|
| Json.NET |1supported|支持的URL(来自用户dbc的贡献)|
我想我们还可以添加更多。但结论是,基于所使用的框架,NaN,Infinity,-Infinity的JSON扩展是不兼容的。
因此,到目前为止,执行这些特殊值的唯一可移植方法是将这些值作为字符串表示:
型
"NaN"
是一个特殊的字符串,需要特别注意,因为任何无效的字符串都会在ECMAScript中返回NaN
。