夯实基础 - parseInt
一道面试题引发的x案
input: ["1", "2", "3"].map(parseInt) output: 1, NaN, NaN
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix
是2-36之间的整数,表示被解析字符串的基数。
parseInt(string, radix)
-
string
要被解析的值。如果参数不是一个字符串,会先使用
toString
将其转换为字符串。字符串开头的空白符将会被忽略。 -
radix
可选从
2
到36
,表示解析字符串时指定的基数。例如指定 16 表示被解析值是十六进制数。注意,10不是默认值!
分而治之
parseInt
函数会返回一个Int类型的值,返回的值由根据指定的基数解释字符串参数的内容决定 。字符串中的前导空格将被忽略。如果基数是未定义的或0,它被假定为10时的数与字符对开始除或,在这种情况下,假设16的基数。如果基数为16,则数字也可以选择以字符对或开头。0x
0X
0x
0X
当parseInt
函数被调用时,采取以下步骤:
-
令inputString为ToString ( string )。
-
让S是inputString 的一个新创建的子字符串,它由第一个不是 StrWhiteSpaceChar 的字符和该字符之后的所有字符组成。(换句话说,删除前导空格。)如果inputString不包含任何此类字符,则让S为空字符串。
-
令符号为 1。
-
如果小号不是空的第一个字符小号是一个减号**-** ,让标志为-1。
-
如果小号不空的第一个字符小号是一个加号**+或减号-** ,然后从第一个字符小号。
-
让R = ToInt32 (基数)。
-
让stripPrefix为true。
-
如果
R ≠ 0
,则- 如果R < 2 或R > 36,则返回NaN。
- 如果R ≠ 16,则让stripPrefix为false。
-
否则,
R = 0
- 让
R = 10
。
- 让
-
如果
stripPrefix
为true
,则- 如果长度小号为至少2和的前两个字符小号要么“ 0X ”或“ 0X ”,然后从前两个字符小号和让 - [R = 16。
-
如果S包含任何不是基数R数字的字符,则让Z是S的子串, 由第一个这样的字符之前的所有字符组成;否则,设Z为S。
-
如果Z为空,则返回NaN。
-
设mathInt是由Z以基数R表示法表示的数学整数值,使用字母A - Z和a - z表示值为 10 到 35 的数字。(但是,如果 R是 10 并且Z包含超过 20数字,根据实现的选择,第 20 位之后的每个有效数字都可以替换为0数字;如果R不是2、4、8、10、16或 32,则mathInt可能是由Z以基数R表示法表示的数学整数值的依赖于实现的近似值。)
-
令number为mathInt的 Number 值。
-
返回符号×编号。
笔记parseInt
只能将字符串的前导部分解释为整数值;
它忽略任何不能被解释为整数符号的一部分的字符,并且没有给出任何此类字符被忽略的迹象。