美文网首页
带你秒懂parseInt

带你秒懂parseInt

作者: isSunny | 来源:发表于2020-10-28 19:04 被阅读0次

相信大家都见过这样一道经典的面试题,如下:

let arr = [10.18,0,15,23];
arr = arr.map(parseInt);
console.log(arr);

首先解这道题之前,我们先来了解一下parseInt和parseFloat是干什么的。
parseInt和parseFloat都是解析一个字符串,并返回一个整数。从字符串左侧开始查找有效数字字符,如果遇到非有效数字则停止查找,如果开始就不是有效数字,直接返回NAN。

parseInt语法

parseInt(value,radix) 它是解析一个字符串并返回指定基数(进制)的十进制数,radix表示被解析的字符串的基数,通俗点说就是把value看成[radix]进制的数,然后转换成十进制。如果radix默认不写,则默认表示为10进制,特殊情况下,以ox开头,代表16进制。
radix是在2~36之间的整数,如果不在这个区间,则返回NAN(除了0,和10是一个意思,代表十进制)。
说了这么多,直接上🌰大家就应该明白了:

parseInt(10,0)  //10
parseInt(13,3) //1
parseInt('24px',5) //14
parseInt(6,1)//NAN

来详细解答一下,parseInt(10,0),显然0代表十进制,所以答案为10,这个就没什么好说的了;

parseInt(13,3) ,将13看为三进制的数,转为十进制数,(几进制就是逢几就进位,如三进制是逢3就进位,所以里面不能有3或者比3大的数),从左往右开始查找,这里1是有效三进制数字,3不是,运算公式为1*3^0 = 1,所以parseInt(13,3)结果为1;

parseInt('24px',5),按照上述计算,从左往右查找,2和4都是有效的5进制数,找到p为非有效数字,停止查找,4为第0位,2为第一位,运算公式:25^1+25^0 = 14,所以parseInt('24px',5)答案为14;

parseInt(6,1),显然1不在2~36之间,所以返回NAN。

好了,了解了parseInt的语法,那我们就思考一下文章一开始我们看到的那道面试题吧,arr.map(parseInt),这里面,我们需要了解两个知识点,第一个map的语法,arr.map(function callback(currentValue[, index[, array]]) {}[, thisArg])
map里的函数会传递3个参数,分别是当前元素值,索引,和方法调用的数组,所以arr.map(parseInt)可以写成arr.map((item,index)=>{parseInt(item,index)})来求解,第二个知识点就是parseInt的语法定义,上面我们已经了解过了parseInt具体怎么解,这里我们直接可以把题简化成parseInt(10.18,0),parseInt(0,1),parseInt(15,2),parseInt(23,3)

答案为10,NAN,1,2

OK,现在再看这道题 是不是很简单咯~
说完parseInt,这里再说一下parseFloat吧,

parseFloat语法

parseFloat()函数解析一个参数(必要时先转换为字符串)并返回一个浮点数。它和parseInt的主要区别在于默认只传一个值的时候,parseFloat可以多识别一个小数点。
parseFloat(10.1) //10.1,另外parseInt支持进制基数,能够把值看做这个进制然后转换为十进制,而parseFloat不支持。

最后说一下和Number()的区别,Number()也是转换数字字符串为数字,但是字符串必须保证都是有效数字才会转换为数字,不然返回NAN,例如

Number('12px') //NAN 
Number('12.3')    // 12.3
Number('12.00')   // 12
Number('123e-1')  // 12.3
Number('')        // 0
Number(null)      // 0
Number('0x11')    // 17
Number('0b11')    // 3
Number('0o11')    // 9
Number('foo')     // NaN
Number('100a')    // NaN
Number('-Infinity') //-Infinity

好了,看完之后是不是豁然开朗咯~~ 今天就到这里吧 ~~

相关文章

网友评论

      本文标题:带你秒懂parseInt

      本文链接:https://www.haomeiwen.com/subject/celcvktx.html