试一试
console.log(parseInt("123"));
// 123 (default base-10)
console.log(parseInt("123", 10));
// 123 (explicitly specify base-10)
console.log(parseInt(" 123 "));
// 123 (whitespace is ignored)
console.log(parseInt("077"));
// 77 (leading zeros are ignored)
console.log(parseInt("1.9"));
// 1 (decimal part is truncated)
console.log(parseInt("ff", 16));
// 255 (lower-case hexadecimal)
console.log(parseInt("0xFF", 16));
// 255 (upper-case hexadecimal with "0x" prefix)
console.log(parseInt("xyz"));
// NaN (input can't be converted to an integer)
语法
parseInt(string)
parseInt(string, radix)
参数
返回值
从给定 string 解析出的整数,或者在以下情况下的NaN:
- 作为 32 位整数的
radix小于2或大于36,或者 - 第一个非空白字符无法转换为数字。
注意:JavaScript 在语言层面没有“浮点数”和“整数”的区别。parseInt() 和 parseFloat() 仅在解析行为上有所不同,但其返回值不一定不同。例如,parseInt("42") 和 parseFloat("42") 将返回相同的值:一个 Number 42。
描述
parseInt 函数将其第一个参数转换为字符串,解析该字符串,然后返回一个整数或 NaN。
如果不是 NaN,返回值将是第一个参数以指定 radix 作为数字的整数。(例如,radix 为 10 从十进制数转换,8 从八进制转换,16 从十六进制转换,依此类推。)
radix 参数被转换为数字。如果未提供,或者值变为 0、NaN 或 Infinity(undefined 被强制转换为 NaN),JavaScript 假定以下情况:
- 如果输入
string(移除开头的空白字符和可能的+/-号后)以0x或0X开头(一个零,后跟小写或大写 X),则radix假定为16,字符串的其余部分被解析为十六进制数。 - 如果输入
string以任何其他值开头,则基数为10(十进制)。
注意:其他前缀,如在数字字面量中有效但 parseInt() 将它们视为普通数字的 0b。parseInt() 也不将以 0 字符开头的字符串视为八进制值。parseInt() 唯一识别的前缀是 0x 或 0X 表示十六进制值——如果 radix 缺失,所有其他都解析为十进制值。Number() 或 BigInt() 可以用来解析这些前缀。
如果基数是 16,parseInt() 允许在可选的符号字符(+/-)之后,字符串可选地以 0x 或 0X 为前缀。
如果基数值(必要时进行强制转换)不在 [2, 36](包含)范围内,parseInt 将返回 NaN。
对于大于 10 的基数,英文字母表示大于 9 的数字。例如,对于十六进制数(基数 16),使用 A 到 F。字母不区分大小写。
parseInt 仅识别两个符号:+ 表示正数,- 表示负数。它在解析的初始步骤中完成,在去除空白字符之后。如果没有找到符号,算法将进入下一步;否则,它会移除符号并在字符串的其余部分上运行数字解析。
如果 parseInt 在输入字符串中遇到一个在指定 radix 中不是有效数字的字符,它会忽略该字符及其所有后续字符,并返回解析到该点为止的整数值。例如,parseInt("2", 2) 返回 NaN,因为 2 在二进制数字系统中不是有效数字。同样,尽管 1e3 技术上编码了一个整数(并且将被 parseFloat() 正确解析为整数 1000),但 parseInt("1e3", 10) 返回 1,因为 e 在基数 10 中不是有效数字。因为 . 也不是数字,所以返回值将始终是一个整数。
如果第一个字符不能使用正在使用的基数转换为数字,parseInt 返回 NaN。允许开头的空白字符。
出于算术目的,NaN 值在任何基数中都不是数字。您可以调用 Number.isNaN 函数来确定 parseInt 的结果是否为 NaN。如果 NaN 传递给算术运算,运算结果也将是 NaN。
由于大数在字符串表示中使用 e 字符(例如,6.022 × 1023 用 6.022e23 表示),因此在非常大或非常小的数字上使用 parseInt 截断数字将产生意外结果。parseInt 不应用作 Math.trunc() 的替代品。
要将数字转换为特定基数中的字符串字面量,请使用 thatNumber.toString(radix)。
由于 parseInt() 返回一个数字,如果字符串表示的整数超出安全范围,它可能会遭受精度损失。BigInt() 函数支持精确解析任意长度的整数,通过返回一个 BigInt。
示例
使用 parseInt()
以下所有示例都返回 15
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt("015", 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
以下所有示例都返回 NaN
parseInt("Hello", 8); // Not a number at all
parseInt("546", 2); // Digits other than 0 or 1 are invalid for binary radix
以下所有示例都返回 -15
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt("-17", 8);
parseInt("-15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
以下示例返回 224
parseInt("0e0", 16);
parseInt() 不处理 BigInt 值。它会在 n 字符处停止,并将前面的字符串视为普通整数,可能存在精度损失。
parseInt("900719925474099267n");
// 900719925474099300
您应该将字符串(不带尾随的 n 字符)传递给 BigInt() 函数。
BigInt("900719925474099267");
// 900719925474099267n
parseInt 不适用于数字分隔符
parseInt("123_456"); // 123
对非字符串使用 parseInt()
当与高基数(例如 36,这使得所有字母数字字符都成为有效的数字位)结合使用时,parseInt() 在处理非字符串时可能会产生有趣的结果。
parseInt(null, 36); // 1112745: The string "null" is 1112745 in base 36
parseInt(undefined, 36); // 86464843759093: The string "undefined" is 86464843759093 in base 36
通常,对非字符串使用 parseInt() 是一个坏主意,特别是将其用作 Math.trunc() 的替代品。它可能适用于小数
parseInt(15.99, 10); // 15
parseInt(-15.1, 10); // -15
然而,这仅是因为这些数字的字符串表示使用基本分数记法("15.99", "-15.1"),其中 parseInt() 在小数点处停止。大于或等于 1e+21 或小于或等于 1e-7 的数字在其字符串表示中使用科学记数法("1.5e+22", "1.51e-8"),而 parseInt() 将在 e 字符或小数点处停止,这总是出现在第一个数字之后。这意味着对于大数和小数,parseInt() 将返回一个一位整数
parseInt(4.7 * 1e22, 10); // Very large number becomes 4
parseInt(0.00000000000434, 10); // Very small number becomes 4
parseInt(0.0000001, 10); // 1
parseInt(0.000000123, 10); // 1
parseInt(1e-7, 10); // 1
parseInt(1000000000000000000000, 10); // 1
parseInt(123000000000000000000000, 10); // 1
parseInt(1e21, 10); // 1
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-parseint-string-radix |
浏览器兼容性
加载中…