该映射将三个参数传递给其函数:
parseInt
函数将查看前两个参数,将第一个正确地视为字符串,但将第二个参数视为要使用的基数。当基数既不为零也不在包括范围2..36
内时,它将返回NaN
(1)。如果您有一个四十个元素的数组,您还会看到一堆NaN
值:
0, NaN, 0, 0, 0, ... 0, 0, 0, NaN, NaN
如果数字字符串不是零,那么数组索引将决定使用哪个基数进行解释,因此你会得到一些非常奇怪的结果。
要真正解决这个问题,你可以提供一个函数,将map
给你的内容转换为parseInt
期望的内容(我想你可以称之为映射映射):
function myParseInt(s,r,a) { return parseInt(s,10); }
var arr = new Array(32).join(0).split('').map(myParseInt)
alert(arr)
您可能也想看一下您创建该数组的方式,它实际上会以一个大小为31而不是32的数组结束。如果您只想要一个由'0'
字符组成的数组,您可以使用以下代码:
var arr = new Array(32).fill('0')
假设您使用支持 ECMAScript 2015 的浏览器,这包括 Safari、Firefox 和 Chrome-desktop(截至本回答时)。
(1) 基数为零是处理十六进制前缀等情况的默认情况。
基数为一在纯位置制中没有意义(其中每个数字都乘以基数的幂并累加),因为唯一允许的数字是 0
,所以每个位值将是该零乘以 1n
。换句话说,在基数为一的系统中唯一可能的数字是零。
因此,从基数 2
到 36
更加合理。
new Array(32).fill(0);
吗? - user5283155