前语
parseInt(string, radix):用于解析一个字符串并回来指定基数的十进制整数。
parseInt(string, radix): 将一个字符串string转化为radix进制的整数,radix为介于2-36之间的数。究竟都是以十进制办法回来。
parseInt规矩
- 将一个字符串
string转化为radix进制的整数,radix为介于2-36之间的数。究竟都是以十进制办法回来。 - 函数将其榜首个参数转化为一个字符串,对该字符串进行解析,然后回来一个整数或
NaN。 - 假定
radix没有指定或者是0,则会被指定为10进制来解析 - 假定
string以0x 0X开端,则指定为16进制来解析。 - 榜首个字符不能转化为数字,
parseInt会回来NaN。
1、string参数假定不是字符串
MDN 对 parseInt 语法的说明: parseInt 办法接收两个参数待解析值 string,基数 radix。string 参数假定不是字符串,则会调用其 toString 办法转化为字符串。因而遇到非字符串解析值,parseInt 内部会有两部操作:
Step1: 调用 toString 办法
(0.5).toString(); // '0.5'
(0.05).toString(); // '0.05'
(0.005).toString(); // '0.005'
(0.0005).toString(); // '0.0005'
(0.00005).toString(); // '0.00005'
(0.000005).toString(); // '0.000005'
(0.0000005).toString(); // '5e-7'
留神上面的输出,咱们能够发现当数字过小时,toString输出的作用是科学计数法办法。
Step2: 堵截操作
引证一段来自StackOverflow的说明:
parseInt 只能将字符串的前导部分说明为整数值;它疏忽任何不能被说明为整数的代码单元,而且不会有疏忽指示。
因而答案只会回来5,其他的e-7被疏忽。
留神事项:
假定即将解析的值放入字符串中,那么上面这种惊喜就不会呈现了:
parseInt("0.0000005"); // 0
parseInt("0.000000005"); // 0
2、radix 值为 undefined、0 或未指定的
当 radix 值为 undefined、0 或未指定的,那 JavaScript 会怎样处理这种情况:
- 假定输入的
string以0x或0X开端,那么radix会被假定为16,字符串的其他部分按照十六进制来解析。 - 假定输入的
string以0开端,ES5规矩运用十进制,但并非悉数的浏览器都支撑,因而运用parseInt时,需要指定radix - 假定输入的
string以其他任何值开端,radix值为10
parseInt("0x16"); // 22
parseInt("0888"); // 888
parseInt("123px"); // 123
3、radix 值小于 2 或 大于 36
radix参数的值为2 ~ 36,当radix小于2或 大于36(不包括0),回来值为NaN
parseInt("123px", 1); // NaN
parseInt("123px", 38); // NaN
parseInt("123px", -1); // NaN
4、待转化字符串中,悉数的可转化数字都不小于 radix 值
回来值为NaN。
parseInt("3456", 2); // NaN
parseInt("45px", 3); // NaN
5、string有必要小于第二个参数radix吗?
parseInt的榜首个参数string的的实数有必要小于进制数?
- 前两个解析正常,为什么第三个
parseInt('125', 5)输出为7,这就不符合上面的核算公式,后来发现它自动把究竟的5给删去了,输出的其实是parseInt('12', 5),这样输出便是等于7。 - 为什么第四个输出是
NaN,由于参数string已5开端,不符合进制所属数,所以直接回来NaN。 - 究竟一个直接把
55删去了,究竟解析成parseInt('1', 5),输出1
定论:
- 假定榜首个参数
string的榜首个值就大于等于第二个参数radix,那么直接回来NaN - 假定榜首个参数
string的榜首个值符合条件,其他值不符合条件,那么不符合条件的值到究竟会被疏忽,然后进行核算
6、parseInt容许前导和后置空格
parseInt容许前导和后置空格,在进行转化前,会首要删去字符串的前导和后置空格。
// 容许前导和后置空格
parseInt(" 123 "); // 123
// 中心呈现的空格会被作为堵截符
parseInt("123 456 "); // 123
7、parseInt能够了解正负号
parseInt("+123"); // 123
parseInt("-123"); // -123
// 只能了解榜首个正负号,第二个非数字字符,因而回来 NaN
parseInt("+-123"); // NaN
运算
parseInt('123',5)
留神:此处千万不要把
1*5^2 + 2*5^1 + 3*5^0直接复制下来在控制台运算,否则核算出来的跟实践parseInt('123', 5)算出来的作用不一样,至于为什么,由于是位运算符,其实在这表达的意思是几次方的意思,正确写法:1*Math.pow(5, 2) + 2*Math.pow(5, 1) + 3*Math.pow(5, 0)
标题一:['1', '2', '3'].map(parseInt)
先看看其他比方:
['1', '2', '3'].map(Number)
// [1, 2, 3]
所以,['1', '2', '3'].map(parseInt)完好写法是:
['1', '2', '3'].map((v, i, arr) => parseInt(v, i))
map():里面是个回调函数,三个参数:分别是当时值(v),下标(i),原始数组(arr)
实施次序:['1', '2', '3'].map((v, i, arr) => parseInt(v, i)),顺次输出:
-
parseInt('1', 0),radix为0,按十进制解析,所以输出1。 -
parseInt('2', 1),radix是2-36之间,没有1,所以输出NaN -
parseInt('3', 2),radix是2,则榜首个参数只能是0,1,所以输出NaN
扩展:
- 数组
'3',...'9'之间对应的下标值便是2~8,榜首个参数都大于进制,所以都是NaN
标题二:['10', '10', '10', '10'].map(parseInt)
['10', '10', '10', '10'].map(parseInt)完好写法是:
['10', '10', '10', '10'].map((v, i, arr) => parseInt(v, i))
顺次输出:
-
parseInt('10', 0),radix为0,按十进制解析,所以输出10。 -
parseInt('10', 1),radix是2-36之间,没有1,所以输出NaN -
parseInt('10', 2),radix是2,输出1*Math.pow(2, 1) + 0*Math.pow(2, 0),悉数输出2 -
parseInt('10', 3),radix是3,输出1*Math.pow(3, 1) + 0*Math.pow(3, 0),悉数输出3
标题三:parseInt(0.0000005)
parseInt (0.0000005) === 5 为 true吗?答案是肯定的。
标题四: ['1', '7', '11'].map(parseInt)
首要,parseInt 接受两个参数,因而第三个参数会被疏忽。
榜首次实施, parseInt('1', 0) 会输出 1 ,由于 0 会转化成 false,而 false 会使它实施默许的进制 10 ,便是 parseInt 默许都是转化十进制;
第2次实施,parseInt('7', 1) 由于没有所谓的 1 进制,所以无法转化,输出 NaN
第三次实施parseInt('11', 2) 答案为 3 ,由于以 2 为进制转化,3 的二进制是 11。
所以究竟的输出的作用便是 [1, NaN, 3]
文章摘抄:
- 深化了解parseInt
- 你不知道的 parseInt

![['1', '2', '3'].map(parseInt)输出什么 ['1', '2', '3'].map(parseInt)输出什么](https://www.6hu.cc/wp-content/uploads/2022/10/1666422806-5d603165aeb47ac.png)
![['1', '2', '3'].map(parseInt)输出什么 ['1', '2', '3'].map(parseInt)输出什么](https://www.6hu.cc/wp-content/uploads/2022/10/1666422807-ecda8c4c6066bcf.png)
评论(0)