关于parseInt你不知道的事

时间:2021-11-27 19:36:46

先来看一个

parseInt(false,16)

如果你知道上面这行代码输出了250 那么恭喜你...

我成功骗到了你的时间..你可以出去了..

——————————————————————————————————

先来看下parseInt的定义用法:

parseInt() 函数可解析一个字符串,并返回一个整数。

但是为什么会出现第一行返回250的情况呢

继续

parseInt(string, radix)

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

当忽略参数 radix , JavaScript 默认数字的基数如下:

  • 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
  • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

 

上面大概的意思就是:当radix有参数时,会以radix为进制解析string

回头看第一行代码 

parseInt(false,16) //250

意思就是 以16进制的方式 将false当做字符串解析 

f代表16 a代表11 l解析不出 

将fa转为十进制就是250啦 

再来几个

    console.log(parseInt(1/0,19))  //18
    console.log(parseInt(parseInt,16)) //15
    console.log(parseInt('0x10')) //16
    console.log(parseInt('10',2)) //2

第一个 1/0 以19进制解析 1/0计算浏览器报Infinity 19进制是 0-9 a-i 只能解析出i 结果为18

第二个 parseInt并不是函数 console.log(parseInt)浏览器解析出 :function parseInt() 好办了 f为15 

第三个 0x为默认十六进制的开头 解析10 16没毛病

第四个 2进制解析10 结果是2

很容易吧 

总结的方法就是 如果你不确定第一个参数是什么东西 用浏览器解析一下 再进行进制换算