前端面试题——[‘1‘, ‘2‘, ‘3‘].map(parseInt)的结果?

['1', '2', '3'].map(parseInt)的结果?

第一感觉结果应该是[ 1, 2, 3 ],但答案却是[ 1, NaN, NaN ]

['1', '2', '3'].map(parseInt);
// [ 1, NaN, NaN ]

这是因为map()方法创建一个新数组,该数组中的每个元素都调用一个提供的函数后返回的结果

parseInt()方法接收2个参数,第一个参数为要被解析的字符串,第二个参数表示要解析的数字的基数可选

map()3个参数,分别是当前元素索引数组本身,因为parseInt()方法接收两个参数,所以这里只用到了前两个参数。

详情请看MDN:

map()

parseInt()

因此,['1', '2', '3'].map(parseInt)的等价代码实际是:

['1', '2', '3'].map((item, index) => {
    return parseInt(item, index);
});

执行三次,返回的值依次是:

parseInt('1', 0); // 1
// 基数为0,数字以10进制来解析,返回1
parseInt('2', 1); // NaN
// 基数为1,数字以2进制来解析,但2>1,无法表示,返回NaN
parseInt('3', 2); // NaN
// 基数为2,数字以3进制来解析,但3>2,无法表示,返回NaN

因此,['1', '2', '3'].map(parseInt)的返回结果当然是[ 1, NaN, NaN ]了。

如果就想要返回[ 1, 2, 3 ],也是可以的,map里传递Number即可:

['1', '2', '3'].map(Number);
// [ 1, 2, 3 ]
上一篇:表达式求值


下一篇:vulnhub_chronos