Javascript

时间:2015-09-27 11:22:35

标签: javascript json xml

我从后端收到一个很长的XML。为了进一步使用xml,我使用标准XMLtoJSON javascript库之一将其转换为JSON对象。问题是,某些XML值包含带前导零的数字,例如:001072。

问题是,当javascript库将xml转换为JSON时,带有前导零的数字会给出完全不同的值。

例如

  

“001072”转换为“570”

其他时候它会正确解析它。例如:

  

“0045678”转换为45678

问题是javascript如何用零处理数字。我不知道这种奇怪行为的原因!!

请建议一个解决方案,它可以一致地用零解析数字,如何在xmltojson库中使用它

2 个答案:

答案 0 :(得分:1)

这很可能是octal literals的问题。如果数字以前导0开头,则默认情况下JavaScript会尝试将其解析为八进制文字。

因此,在调用parseInt时应始终指定radix参数。图书馆可能不这样做。

parseInt("012", 8); // 10
parseInt("012", 10); // 12

我认为this可能是图书馆中的违规行。编辑库或编辑XML。

答案 1 :(得分:0)

领先零的八位数正在逐渐消失。对于ECMAScript5,它们仍然可能导致问题,因此strict mode中不允许这样做并抛出运行时错误。你真的不应该使用非严格模式的第三方脚本,因为太多的原因它们是危险的,正如你可以看到的处理八进制数字。

随着ECMAScript 6变得更加广泛,前导零的使用将被全部推出。

Octals文字将有'0o'前缀0o10 === 8可以是大写'o'但我相信你可以看到这将是一个麻烦。 ES6还将使用前缀0b1000 === 8形式化二进制格式,尽管大多数浏览器已经支持它一段时间了。 Hex已经存在了一段时间0x08 == 8

一些带前导零的数字是decmil而一些八进制取决于数字中的数字。八进制不使用数字8和9,因此任何具有这些数字的数字都不能是八进制数。