js中parseInt()的用法和&返回的结果

JavaScript014

js中parseInt()的用法和&返回的结果,第1张

在js里,一个&表示运算符按位与,就是把两个二进制数按每一位比较,两个都为1则为1,否则为0(也类似与且,都真才为真)

比如 1111&0110 = 0110。( 从第二个1第一次相等,第二个1第二次相等,后面再无相等的,返回结果则为0110

如果不是二进制数比较,需要先把这两个数转换为二进制,比如

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。

那是在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)//这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。