JS中容易忽略的知识点(一): parseInt函数的第二个参数

1. 题目


["1", "2", "3"].map(parseInt)

题目来源: http://javascript-puzzlers.herokuapp.com/

2. 解析


  • map用法:
["1", "2", "3"].map((item, index, arr)=>{
    return `${index}-${item}`
}); 
// ["0-1", "1-2", "2-3"]
  • parseInt用法:

    摘自MDN:

parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数

所以, 此题的关键在于求解出:

parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)

parseInt("1", 0): radix为 0 时, 默认进制为十进制, 因此结果为 1;

摘自MDN:

如果 radixundefined0或未指定的,JavaScript会假定以下情况:

  1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。
  2. 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix
  3. 如果输入的 string 以任何其他值开头, radix10 (十进制)。
parseInt("2", 1): 当 radix 小于 2 或大于 36, 返回 NaN;

parseInt("3", 2): 除了“0、1”外,其它数字都不是有效二进制数字, 返回 NaN;

3. 答案


因此, 最终结果为: [1, NaN, NaN]

你可能感兴趣的:(javascript前端)