map 和 parseInt 组合
看题:输出的是什么?
const arr = ['1', '2', '3'].map(parseInt)
我们可以看作:
const arr = ['1', '2', '3'];
arr.map((item,index) => {
return parseInt(item, index);
})
过程是:
parseInt('1', 0); // radix: 0 ,所以基数采用 10, 正常取整 => 1
parseInt('2', 1); // radix: 1 , 因为他的范围为 2 ~ 36,所以返回 => NaN
parseInt('3', 2); // radix: 2 , 2 进制是以 0,1 开头的,我们这里是为 3 开头的,所以返回 => NaN
再来一道:
const arr = ['10','10','10','10','10'].map(parseInt);
// 可以看作
const arr = ['10','10','10','10','10'];
arr.map((item, i) => {
return parseInt(item, i);
})
过程:
parseInt('10', 0); // 10
parseInt('10', 1); // NaN
parseInt('10', 2); // 以 2进制作为基数,取整后为 2
parseInt('10', 3); // 以 3进制作为基数,取整后为 3
parseInt('10', 4); // 以 4进制作为基数,取整后为 4
// 什么进制,转换后都为 进制号,16 进制转换为 16
相关知识:
parseInt() 方法:
概念:给数字进行取整;
语法:
parseInt(string[,radix]);
参数:
string:
要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 ToString
抽象操作)。字符串开头的空白符将会被忽略。
radix:
一个值,他介于 2 ~ 36 之间,表示字符串的基数,默认为 10,返回整数 或 NaN。
注意:
- radix 为 0 或 没有指定的情况下,采用默认值 10;
- 如果字符以 ’0x’ 或 ‘x0’ 开头的,基数是 16 进制;
- 如果以 ’0‘ 开头的 ,基数是 8 或是 10;
- 如果字符串不以以上的如何一个开头的,基数就为 10;
parseInt(10); // 没有指定,radix为 10; => 10
parseInt(10, 10) // => 10