前端面试 ["1", "2", "3"].map(parseInt)

题目点评

这道题目要求对ECMAScript5版本的函数比较熟悉才能够正确的解答出来,重点考察的就是map函数,这个函数就是ECMAScript5(最新版本)新增的,在加上parseInt这个函数本身也很难理解,该题目难易程度偏难!

map方法的使用 

语法

array.map(callback[,thisArg]);

对数组的重新映射。将数组的各个元素依次传入到回调函数callback,回调函数返回的结果依次替换原数组对应的元素。

回调函数callback 会被自动传入三个参数:数组元素,元素索引,原数组本身。

map(function(T=,number=, Array.=))

T:表示元素

number:元素的下标

Array.:表示数组原始值

看到这个越来越感觉JavaScript在向OOP编程语言Java、C#靠近。个人感想,不由自发,看不懂的可以忽略。 

parseInt()方法的使用

语法

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

参数

s:表示字符串

radix:表示其它进制转十进制的基数,范围在2~36,不在这个范围的返回NaN。该参数可以省略或为0,这种情况会根据字符串的开头来判断基数,规则如下:

1)字符串以"0x" 开头,基数为16

2)字符以"0"开头,版本低于ECMAScript 5的,基数为8。版本为ECMAScript 5的,基数为10

3)以 1 ~ 9 的数字开头,基数为10。

基数是什么?

基数:是其它进制转十进制数的公式里的组成部分,公式如下:

 

位数1 基数0+ 位数2 基数1位数3 基数2 位数n 基数n-1

以二进制101转十进制为例,二进制的基数为2。(估计看到这里的很多同学几乎晕倒,看不明白了,看不明白的请看视频演示和讲解 http://www.chuanke.com/3885380-190205.html) 

百位

十位

个位

 

1

0

1

 

2

1

0

权重

101=1*20+0*21+1*22=1+0+4=5 

所以 parseInt(“101”,2)返回5

由此我们可以推到出parseInt(“210”,3)的结果

parseInt("210",3)=0*30+1*31+2*32=0+3+18=21 

懵逼了:2~36进制都是有效的,我们只听过二进制、八进制、十进制、十六进制,三十六进制是什么鬼?请看parseInt函数的详解【任你百度都没有看不懂的,老曹给你做详解便知其奥妙】。 

题目的结果推导

["1","2", "3"].map(parseInt)

[0]=parseInt(“1”,0);//1*100=1*1=1

[1]=parseInt(“2”,1);//radix不在2~36的返回NaN

[2]=parseInt(“3”,2);//二进制数没有3,只有0 1 ,所以NaN 

所以最终的结果是 [1,NaN,NaN]

parseInt() MDN链接

另:parseFloat() 只有一个入参,如果是[1,2,3].map(parseFloat),

f658b724213882f7a1b409cea740a1271e2.jpg

详情参考parseFloat()MDN链接

转载于:https://my.oschina.net/u/2499632/blog/1827721

你可能感兴趣的:(前端,面试,javascript)