2015-09-27 50 views
0

我從後端收到一個長XML。爲了進一步使用xml,我使用標準XMLtoJSON javascript庫之一將其轉換爲JSON對象。問題是,一些XML值包含具有前導零的數字,例如:001072.Javascript中前導零的數字

問題是,當JavaScript庫將xml轉換爲JSON時,帶前導零的數字會給出完全不同的值。

例如

「001072」轉換「570」

其他時候,它正確地解析它。例如:

「0045678」轉換成45678

的問題是手柄用零如何JavaScript的數量。我不知道這種奇怪行爲的原因!

請建議可始終解析用零號一個解決方案,我如何使用它與xmltojson庫

+0

我知道這是迴避的解決方案,但你可以使用字符串切片,直到你找到真正的問題,導致這種異常 – marmeladze

回答

1

這是最有可能octal literals問題。如果一個數字以0開頭,默認情況下JavaScript會嘗試將其解析爲八進制文字。

因此,撥打parseInt時應始終指定基數參數。圖書館可能不會那樣做。

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

我認爲this可能是庫中的違規行。編輯庫或編輯您的XML。

0

具有前導零的八進制數字正在出來。對於ECMAScript5,它們仍然可能導致問題,因此不允許在strict mode中發出運行時錯誤。您真的不應該使用不是嚴格模式的第三方腳本,它們的危險性太多,正如處理八進制數字所看到的。

隨着ECMAScript 6變得更加廣泛,使用前導零將被推出。

八進制文字將有一個'0o'前綴0o10 === 8可以是大寫'o'但我相信你可以看到這將是一個麻煩。儘管大多數瀏覽器都支持它一段時間,但ES6還會將前綴0b1000 === 8的二進制格式正式化。十六進制也出現了一段時間0x08 == 8

一些數字前導零的原因是decmil和一些八進制取決於數字中的數字。八進制不使用數字8和9,因此具有這些數字的任何數字都不能是八進制數。