题目点评
这道题目要求对ECMAScript5版本的函数比较熟悉才能够正确的解答出来,重点考察的就是map函数,这个函数就是ECMAScript5(最新版本)新增的,在加上parseInt这个函数本身也很难理解,该题目难易程度偏难!
map方法的使用
语法
array.map(callback[,thisArg]);
对数组的重新映射。将数组的各个元素依次传入到回调函数callback,回调函数返回的结果依次替换原数组对应的元素。
回调函数callback 会被自动传入三个参数:数组元素,元素索引,原数组本身。
map(function(T=,number=, Array.
T:表示元素
number:元素的下标
Array.
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),
详情参考parseFloat()MDN链接