关于parseInt你不知道的事
先来看一个
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
很容易吧
总结的方法就是 如果你不确定第一个参数是什么东西 用浏览器解析一下 再进行进制换算