2012-08-06 30 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