小引
为什么要说parseInt()?
parseInt()不是一个很基础的函数吗?就是把字符串转化为整数并且返回这个整数啊
是的,一开始接触这个函数我也是这么想的(可能因为之前自己学习的时候比较粗心看漏了很多知识点,如果一早有了解的话,可以不用看下去了,很基础的知识点而已)直到最近看到一道题目,发现自己得重新去仔细复习下这个函数了,顺便记录一下。
下面代码的运行结果是:
var a = parseInt("a10")
var b = parseInt('010')
var c = parseInt("10*22")
var d = parseInt("10"*"22")
var e = parseInt("10"+"22")
var f = parseInt(10+"22"*2/2)
document.write(a,b,c,d,e,f)
定义
parseInt() 函数可解析一个字符串,并返回一个整数。
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
当忽略参数 radix , JavaScript 默认数字的基数如下:
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
语法
parseInt(string, radix)
参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
举例
是的,之前我对parseInt()函数的学习内容就是以上的部分,忽略了很多细节和例子,以下用几个例子来补充一下这个函数容易让人遗漏的知识点
一:无视被解析字符串最前和最后的空格
如parseInt('11')和parseInt(' 11 ')是一样的
二:正规格式是parseInt(string,radix)。radix可以省略,radix为0或2-36之间的整数,用来表示被解析数值的进制。(注意不是解析返回结果的进制)。如果radix不在此范围内,返回NaN;如果radix 省略或者为0,则按默认进制对string进行解析。
如parseInt('11',37)返回NaN
三:解析从第一个可以解析的字符开始,到第一个不能解析的字符(如空格,标点符号等)结束。后面的字符不再解析。如果第一个字符不可以解析,则返回NaN。
如parseInt('a8989')返回NaN
四:Javascript 开放地支持一些数字字符串直接进行运算
10*10
10*"10"
"10"*"10"
10+"45"*"4"/2
甚至"12.5"*"8"
以上都返回 Number 类型的 100
这样总结下来,题目的答案就很明确了,
var a = parseInt("a10") ,输出NaN ,第一个字符不可以解析,则返回NaN
var b = parseInt('010') ,输出8 ? 上面不是说以0开始的字符串应该是以0开头的字符把其后的字符解析为八进制吗?这里答案不应该是8?看清楚一点,文档也写明了"ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字",下面其实还有一行注释:从 ECMAScript 5 开始,默认值为十进制基数 (10)。 所以在支持版本为es5之前的版本,parseInt("010") 为 8,es5及之后的都解析为10
var c = parseInt("1022"),输出 10 ,parseInt()函数解析到结束
var d = parseInt("10"*"22"),输出220 ,Javascript 开放地支持一些数字字符串直接进行运算,
var e = parseInt("10"+"22"),Javascript 开放地支持一些数字字符串直接进行运算,不包括单独+运算,这里的+会解析会字符串的拼接
var f = parseInt(10+"22"*2/2),输出32
总结
简单粗暴的一句话:温故而知新,可以为师矣