阿里巴巴的前端面试题目中有一道题是这样的,是关于parseInt()的用法的,题目如下
var b = parseInt("01");
alert("b="+b);
var c = parseInt("09/08/2009");
alert("c="+c);
解答这道题目,我们必须要知道parseInt()是怎么工作的?正确的答案应该是 b=1 c=0
a、parseInt()将一个字符串转换成整数,它将字符串中的字符逐一解析,碰到不能解析的(不是一个数了)就返回。尽可能多的解析(贪婪匹配)。
b、如果 string 以 0 开头,那么 parseInt() 把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
举例:比如parseInt("ab123");
解析第一个字符a,看到不是一个数字,直接返回Nan,not a numble 不是一个数
举例:比如parseInt("123");
解析到1是个数字,这个时候没有返回,由于要尽可能多的解析(贪婪匹配),所以再看2,也是个数字,再看3,还是个数字,没了,,所以返回123;
了解了这些知识之后,我们来分析这道题目
1
|
var b = parseInt( "01" ); |
一看,0,parseInt()默认要返回一个8进制数,再解析1,没了,这是js会解析到01,一看,这不是个8进制数中的1吗,所以返回1。
2
|
alert( "b=" +b); |
输出b=1,这里的 + 是连字符
3
4
|
var c = parseInt( "09/08/2009" ); alert( "c=" +c); |
第3句,看到0之后,parseInt()默认要返回一个8进制数,再看后面是9,显然这不是一个8进制数,所以就返回一个0了。
所以c=0