概述
依据指定基数 [ 参数 radix 的值],把字符串 [ 参数 string 的值] 解析成整数。
语法
parseInt(string[, radix])
参数说明
- string:要转换的字符串。如果不是字符串,则会使用ToString隐式地将其转换为字符串。
- radix:字符串转换的基数,是一个2~36之间的整数。注意:10不是默认值
返回值
- 十进制整数
- NaN(一下几种情况会返回NaN)
- radix的值<2或>36
- 第一个非空字符不能转换为数字
- 第一个非空字符不是radix基数范围内的字符
特别说明
radix是undefined、0或未指定时,分以下几种情况考虑:
1.若string是以“0x”或“0X”开头,那么radix被假定为16,即字符串的其余部分会被当成16进制去解析;
parseInt("0x21"); // 33, 16*2 + 1
parseInt("0Xff", 0); // 255, 16*15 + 15
parseInt("0xa1", undefined); // 161, 16*10 + 1
2.若string是以“0(o)”开头,radix被假定为8(八进制)或10(十进制),具体使用哪一个取决于实现。(ES5之前是八进制,ES5明确表示使用十进制,但是有些环境未实现)。
// firefox79.0 测试结果:使用十进制解析
parseInt("015"); // 15
parseInt("08"); // 8
3.若String是以其他任何值开头,则radix是10(十进制)。
parseInt("500"); // 500
parseInt("404"); // 404
parseInt("101"); // 101
案例解析
parseInt(100, 2); // 4, 1*2^2
parseInt(15, 2); // 1, 5不是有效的二进制数,解析到1就停止,1*2^0
parseInt(3, 2); // NaN, 二进制只有0和1,3不是有效的二进制数
parseInt(027, 8); // 19, 027先被转换成十进制的字符串"23",再以8位基数将"23"转换为十进制整数,2*8^1 + 3*8^0 = 19
parseInt(0x16, 16); // 34,原理同上
parseInt(0o50, 8); // 32, 先转换成十进制的字符串"40",再以8位基数,转换为十进制整数32