运行时
["6", "1", "0", "3", "3"].map(parseInt)
在浏览器的JavaScript控制台中,我得到输出
[6, NaN, 0, NaN, 3]
!但我期待着
[6, 1, 0, 3, 3]
。
似乎 可能与parseInt 可以接受两个参数而不是一个参数有关。我的印象是map
仅在数组的每个元素上分别调用了给定的函数。有人可以阐明地图的工作原理以及为什么会导致这种奇怪的行为吗?
答案 0 :(得分:2)
根据documentation,parseInt
接受两个参数:字符串整数和基数。同时,map
传递两个参数:值和索引。
因此,基本上您的通话等效于此:
["6", "1", "0", "3", "3"].map((value, index) => parseInt(value, index))
在无法使用给定参数进行解析时会生成NaN
。
特别是:
parseInt("6", 0)
之所以有效,是因为它似乎使用默认的基数(10)parseInt("1", 1)
失败,因为1无效的基数parseInt("0", 2)
正在工作,它是十进制0的二进制表示形式parseInt("3", 3)
失败,因为基数3中不能有“ 3” parseInt("3", 4)
正常工作,它是十进制3的4基表示法答案 1 :(得分:1)
原因是因为parseInt为parseInt(string, radix);
运行map时,它返回参数(value, index, array)
因此它正以
的形式运行parseInt("6", 0);
parseInt("1", 1);
parseInt("0", 2);
parseInt("3", 3);
parseInt("3", 4);