我从后端收到一个很长的XML。为了进一步使用xml,我使用标准XMLtoJSON javascript库之一将其转换为JSON对象。问题是,某些XML值包含带前导零的数字,例如:001072。
问题是,当javascript库将xml转换为JSON时,带有前导零的数字会给出完全不同的值。
例如
“001072”转换为“570”
其他时候它会正确解析它。例如:
“0045678”转换为45678
问题是javascript如何用零处理数字。我不知道这种奇怪行为的原因!!
请建议一个解决方案,它可以一致地用零解析数字,如何在xmltojson库中使用它
答案 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,因此任何具有这些数字的数字都不能是八进制数。