2012-08-06 83 views
0

可能重複:
Workarounds for JavaScript parseInt octal bug怪異intParse行爲

鑑於此腳本:

<script type="text/javascript"> 
    var noproblem07 = parseInt("07") - 1; 
    alert("No problem (07): " + noproblem07); 
    var problem08 = parseInt("08") - 1; 
    alert("Problem (08): " + problem08); 
    var problem09 = parseInt("09") - 1; 
    alert("Problem (09): " + problem09); 
    var noproblem10 = parseInt("10") - 1; 
    alert("No problem (10): " + noproblem10); 
</script> 

爲什麼 「08」 和 「09」 的決心爲-1?

+1

是指第二個參數爲[parseInt函數(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ parseInt) – Yoshi 2012-08-06 18:02:27

+0

爲什麼你減1? – Bergi 2012-08-06 18:03:41

回答

3

因爲parseInt將前導零的字符串解析爲八進制。爲了解決這個問題,使用radix參數parseInt

>>> parseInt("08") 
0 
>>> parseInt("08", 10) 
8 
1

因爲你在它運行的瀏覽器不正確執行規範,並嘗試將其解析爲八進制,導致0

它工作正常,在IE9和Safari 6.您可以通過第二個參數進行它在所有瀏覽器中都正確:

parseInt(x, 10); 
+0

他們可能正在執行規範就好了。他們只是實現了一個*舊的*規範。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt#ECMAScript_5_Removes_Octal_Interpretation – kojiro 2012-08-06 18:04:38

+0

@kojiro您認爲Chrome和Firefox正在實施es3?他們實施es5,但關於這個問題不正確。 – Esailija 2012-08-06 18:06:26

+0

這是Chrome,Firefox和IE9中的全部功能。 – 2012-08-06 18:08:16