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

JavaScript026

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

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

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

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

parseInt是用于将字符串根据基数转换成整数。

首先parseInt()函数中可以给定两个参数,第一个是要解析的数,第二个是以多少进制解析。

例如parseInt(‘10’,8)的意思为把一个8进制数10,转换成一个10进制数,最后结果当然为8.

接着我们再看个例子,parseInt(‘100’,8),把一个8进制数100,转换成一个10进制数,最后结果那便是64,记住parseInt把最后结果都是转换成10进制数。

最后再看个例子,parseInt(‘12’,2)把一个二进制数12,转换成一个10进制数,因为二进制数中不存在2,因此解析时仅仅只解析数字1,将二进制的1换成十进制,结果显然就是1.

V8中parseInt函数的源码:【只列出一部分,如需要查看请参见V8中src/conversions-inl.h和src/compiler/js-builtin-reducer.cc】

if (radix == 0) { //如果传入radix是0,则以10进行处理

// Radix detection.

radix = 10

if (*current == '0') {

++current

if (current == end) return SignedZero(negative)

if (*current == 'x' || *current == 'X') {

radix = 16

++current

if (current == end) return JunkStringValue()

} else {

leading_zero = true

} else if (radix == 16) { //16进制

if (*current == '0') {

// Allow "0x" prefix.

++current

if (current == end) return SignedZero(negative)

if (*current == 'x' || *current == 'X') {

++current

if (current == end) return JunkStringValue()

} else {

leading_zero = true

if (radix <2 || radix >36) return JunkStringValue()//radix不在2~36之间的处理

例如解析:

parseInt('0101' , 1) =>NaN

parseInt('453' , 2) =>NaN因为453不符合二进制数字,所以无法转换出正确的数字

与 parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一 个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点是无效的,因此它后面的字符串将被忽略。举例来 说,“22.34.5”将会被转换为22.34。

除了第一个小数点有效之外,parseFloat()与parseInt()的第二个区别 在于它始终都会忽略前导零。parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格式的字符串始终会被转换 为0。由于parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法。