JavaScript中parseInt函数用法如下:
parseInt() 函数可解析一个字符串,并返回一个整数
parseInt(string, radix)
string:
必需。要被解析的字符串。
radix:
可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。
如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值:返回解析后的数字。
说明:
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
举例:
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
提示:
只有字符串中的第一个数字会被返回。
开头和结尾的空格是允许的。
如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
在js里,一个&表示运算符按位与,就是把两个二进制数按每一位比较,两个都为1则为1,否则为0(也类似与且,都真才为真)
比如 1111&0110 = 0110。( 从第二个1第一次相等,第二个1第二次相等,后面再无相等的,返回结果则为0110 )
如果不是二进制数比较,需要先把这两个数转换为二进制,比如
那是在IE上才会出现的问题,具体是哪个版本的IE来我忘了,当调用parseInt()时,他会先把字符串变成几进制(具体几进制,我忘了)然后在转换成数字,对于纯数字的字符串建议用Number()下面是从网上找的
首页 >学习笔记 >parseInt()方法在IE9中的差异性
parseInt()方法在IE9中的差异性
对于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)//这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。