['1','2','3'].map(parseInt)结果是 一些必要的说明 map 使用很简单,不做过多说明 parseInt 需要说一下,我们都知道用来对数据进行取整,若是不合理,便返回 NaN 。而且它还有一个可选属性 radix ,而这也是我们此次重点说明的对象。 parseInt 在 mdn 上可以到 parseInt 的第二个参数 radix 取值范围为 2~36 ,如果取值是 0, 1 又会如何呢。
parseInt(1, 0) parseInt(1, 1) 首先解释为 0 ,根据mdn上的说明:
如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况:
如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被解析为十六进制数。 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。 根据上面可以知道,若 radix=0 时,相当于默认为 10进制 ,那接下来好说了
parsetInt(1, 0) // 相当于 parsetInt(1, 10) // => 1 * 10^0 = 1 * 1 = 1 因而 parseInt(1, 0) = 1
接下来解释 1
1 表示 1进制 但是目前 1进制 具体是用 0 还是用 1 ,没有明确的说明,详见知乎 因而导致
parsetInt(1,1) 直接变成了 NaN
这里需要简单说明一下
二进制:0,1 数字进行
八进制:07
10进制: 09
16进制:09 AF
现在可以来说明 ['1','2','3'].map(parseInt) 为何是 1,NaN,NaN
其实可以变成这样的写法
['1', '2', '3'].map(function (value, index) { return parseInt(value, index) }) // 细节 index = 0: parsetInt('1', 0) = 1 index = 1: parsetInt('2', 1) = NaN index = 2: parsetInt('3', 2) = NaN // 因为 2进制必须是 0,1数字表示 假设上面的数组变更一下呢
['1', '2', '011'].map(parseInt) // 1,NaN,3 此致,便解释清楚了,考点在于 进制转换,以及 parseInt 的一些细节是否知道的问题。