Discuss / JavaScript / 小明问题

小明问题

Topic source

辣椒酱帅

#1 Created at ... [Delete] [Delete and Lock User]

r = arr.map(function(x){return parseInt(x)});

辣椒酱帅

#2 Created at ... [Delete] [Delete and Lock User]

parseInt函数默认传递两个参数:1,需要转换成数字的字符串,2,基数(转换成的数字是以什么进制显示,例如2,就是2进制,默认或者等于0,为十进制显示,小于2或者大于36,parseInt()返回NaN). 这样就很好理解这道题出的问题了。map(),参数为一个函数,这个函数默认参数有三个,1:元素值 2:元素值的下标 3:调用者本身(在这里是arr这个数组)。

我们来写一下递归调用的三次,parseInt接收到的函数。 第一次: map参数函数传递过去的参数('1',0,[1,2,3]) parseInt接收到的参数('1',0); parseInt('1',0)//结果 1

第二次:map参数函数传递过去的参数('2',1,[1,2,3]) parseInt接收到的参数('2',1); parseInt('2',1) //显示 NaN

第三次:map参数函数传递过去的参数('3',2,[1,2,3]) parseInt接收到的参数('3',2); parseInt('3',2) //显示 NaN

我是初学者,纯手写的不对的地方请包含。

MeedoLiu

#3 Created at ... [Delete] [Delete and Lock User]

谢谢! 很清楚!

铁头198009

#4 Created at ... [Delete] [Delete and Lock User]
var arr = ['1','2','3'];
console.log(arr.map(parseInt)); // 奇怪的结果
console.log(arr.map(x => parseInt(x))); // 
console.log(arr.map(x => +x)); // x => +x; 匿名函数, 左边是参数, 右边是返回值

function string2int(x, y, z) {
    console.log(x, y, z); // map 默认会传3个参数给调用的函数, 元素, 下标, 数组
    return parseInt(x);
}
console.log(arr.map(string2int));

  • 1

Reply