对于parseInt()方法,ECMAScript中有这样一条规范请大家一定要注意: ECMAScript规范指出,如果一个字符串以“0”开头(而不是“0x”或“0X”开头),parseInt()可能把它解释为一个八进制数或者一个十进制数。由于这一行为是不确定的,所以不应该使用parseInt()去解析用0开头的数字,除非显示的指定所使用的基数。
请看代码:
parseInt("050");
这句代码在 IE678、火狐、Opera、Safari、Chrome中,均被作为八进制进行解析,所以最终会被解析为40。
而在IE9下,是作为十进制来处理的,所以最终的解析结果是50。

另外,猜猜下面的代码运行结果都是什么:
                parseInt("0.12");	//0
                parseInt(".12");	//NaN
                parseInt("0050");	//IE9: 50,  IE678+标准浏览器: 40 
                parseInt("-0050");	//IE9: -50, IE678+标准浏览器: -40 
                parseInt("078");	//IE9: 78,  IE678+标准浏览器: 7
                parseInt("08");		//IE9: 8,   IE678+标准浏览器: 0
                parseFloat("0xFF");     //255
             
总结:
如果你真想用parseInt()来解析数字的话,一定要指定第二个参数(基数),这样是最安全的。因为大多数情况下你所解析的数字都是用户输入的,而用户输入080这种东西,我想,很多验证程序都是放过的。所以用parseInt()解析就有可能出现逻辑错误。所以务必要指定基数。
例如: parseInt("050", 10); //这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。
浏览器 十进制 火狐 字符串 八进制 最后修改于 2012-03-17 19:32:00
上一篇