在 JavaScript 中,map
函数会遍历数组中的每个元素,并对每个元素执行提供的函数,然后返回一个新数组,其中包含每次函数调用的结果。然而,parseInt
函数的用法在这里有一些特殊之处,特别是当它与 map
函数一起使用时。
parseInt
函数通常有两个参数:要转换的字符串和基数(进制)。在 map
函数中,它会接收三个参数:当前元素、当前元素的索引和整个数组。因此,当你这样使用 map(parseInt)
时,parseInt
会接收到三个参数,而不仅仅是需要转换的字符串。
对于数组 ['520', '888', '168', '66.6']
,map(parseInt)
的执行会像这样:
-
对于
'520'
:parseInt('520', 0, array)
。由于基数为 0,JavaScript 会自动根据字符串的格式选择合适的基数(在这种情况下是十进制),所以结果是 520。 -
对于
'888'
:parseInt('888', 1, array)
。这里的基数是 1,但基数 1 在parseInt
中是无效的,因此这个函数会返回NaN
(非数字)。 -
对于
'168'
:parseInt('168', 2, array)
。这里的基数是 2(二进制),但字符串'168'
包含非二进制数字(6 和 8),因此parseInt
无法解析它,并返回NaN
。 -
对于
'66.6'
:parseInt('66.6', 3, array)
。这里的基数是 3(三进制),但字符串'66.6'
包含非三进制数字和一个小数点,因此parseInt
同样无法解析它,并返回NaN
。
综上所述,['520', '888', '168', '66.6'].map(parseInt)
的执行结果是 [520, NaN, NaN, NaN]
。这是一个常见的 JavaScript 陷阱,特别是在面试中可能会被问到。