js中的paserInt()

240 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

问题

思考代码中输出的a 为什么

let a= ['1','2','3','4'].map(parseInt)
console.log(a)

答案

a的输出值为 [1, NaN, NaN, NaN]

原因

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

当['1','2','3','4'].map()时,传入paserInt()里的参数,一个为元素,一个为元素下标index.

paserInt 特性

  1. radix小于 2 或大于 36,或第一个非空格字符不能转换为数字。 则返回NaN。
  2. 如果 radix是 undefined、0或未指定的,有以下三种情形。
  • 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串 的其余部分被当做十六进制数去解析。
  • 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt时,一定要指定一个 radix。
  • 如果输入的 string 以任何其他值开头, radix是 10(十进制)
  1. parseInt可以理解两个符号。+ 表示正数,- 表示负数(从ECMAScript 1开始)

警告: parseInt将 BigInt转换为并在这个过程中失去了精度。这是因为拖尾的非数字值,包括 "n",会被丢弃。

分析

当元素为'1'传入paserInt()时,传入的两个值为paserInt('1',0);故遵循特性2的第三个小条件,radix 为0 ,输入的string 以任何值开头,则默认radix 为10.

当元素为'2'传入paserInt()时,传入的两个值为paserInt('2',1);radix 为1 ,则遵循特性1 ,返回NaN

当元素为其他时,radix 在范围内(大于2,小于36时),观察元素是不是有效radix进制数字

parseInt("Hello", 8); // 根本就不是数值
parseInt("546", 2);   // 除了“0、1”外,其它数字都不是有效二进制数字

总结

很简单的一个问题,有时候我们会因为基础不够牢靠,而忘记应该怎么作答。希望你也可以把基础打得很牢靠。