parseInt()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

parseInt() 函数解析字符串参数,并返回指定基数(数学记数系统中的基数)的整数。

试一试

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)

语法

js
parseInt(string)
parseInt(string, radix)

参数

string

以整数开头的字符串。此参数中开头的空白字符将被忽略。

radix 可选

一个介于 236 之间的整数,表示 string基数(数学记数系统中的基数)。它会被转换为32 位整数;如果转换后非零且超出 [2, 36] 范围,函数将始终返回 NaN。如果为 0 或未提供,则基数将根据 string 的值推断。请注意——这并非总是默认为 10下面的描述更详细地解释了未提供 radix 时会发生什么。

返回值

从给定 string 解析出的整数,或者在以下情况下的NaN

  • 作为 32 位整数的 radix 小于 2 或大于 36,或者
  • 第一个非空白字符无法转换为数字。

注意:JavaScript 在语言层面没有“浮点数”和“整数”的区别。parseInt()parseFloat() 仅在解析行为上有所不同,但其返回值不一定不同。例如,parseInt("42")parseFloat("42") 将返回相同的值:一个 Number 42。

描述

parseInt 函数将其第一个参数转换为字符串,解析该字符串,然后返回一个整数或 NaN

如果不是 NaN,返回值将是第一个参数以指定 radix 作为数字的整数。(例如,radix10 从十进制数转换,8 从八进制转换,16 从十六进制转换,依此类推。)

radix 参数被转换为数字。如果未提供,或者值变为 0、NaNInfinityundefined 被强制转换为 NaN),JavaScript 假定以下情况:

  1. 如果输入 string(移除开头的空白字符和可能的 +/- 号后)以 0x0X 开头(一个零,后跟小写或大写 X),则 radix 假定为 16,字符串的其余部分被解析为十六进制数。
  2. 如果输入 string 以任何其他值开头,则基数为 10(十进制)。

注意:其他前缀,如在数字字面量中有效但 parseInt() 将它们视为普通数字的 0bparseInt()将以 0 字符开头的字符串视为八进制值。parseInt() 唯一识别的前缀是 0x0X 表示十六进制值——如果 radix 缺失,所有其他都解析为十进制值。Number()BigInt() 可以用来解析这些前缀。

如果基数是 16parseInt() 允许在可选的符号字符(+/-)之后,字符串可选地以 0x0X 为前缀。

如果基数值(必要时进行强制转换)不在 [2, 36](包含)范围内,parseInt 将返回 NaN

对于大于 10 的基数,英文字母表示大于 9 的数字。例如,对于十六进制数(基数 16),使用 AF。字母不区分大小写。

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 × 10236.022e23 表示),因此在非常大或非常小的数字上使用 parseInt 截断数字将产生意外结果。parseInt 不应用作 Math.trunc() 的替代品。

要将数字转换为特定基数中的字符串字面量,请使用 thatNumber.toString(radix)

由于 parseInt() 返回一个数字,如果字符串表示的整数超出安全范围,它可能会遭受精度损失。BigInt() 函数支持精确解析任意长度的整数,通过返回一个 BigInt

示例

使用 parseInt()

以下所有示例都返回 15

js
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

js
parseInt("Hello", 8); // Not a number at all
parseInt("546", 2); // Digits other than 0 or 1 are invalid for binary radix

以下所有示例都返回 -15

js
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

js
parseInt("0e0", 16);

parseInt() 不处理 BigInt 值。它会在 n 字符处停止,并将前面的字符串视为普通整数,可能存在精度损失。

js
parseInt("900719925474099267n");
// 900719925474099300

您应该将字符串(不带尾随的 n 字符)传递给 BigInt() 函数。

js
BigInt("900719925474099267");
// 900719925474099267n

parseInt 不适用于数字分隔符

js
parseInt("123_456"); // 123

对非字符串使用 parseInt()

当与高基数(例如 36,这使得所有字母数字字符都成为有效的数字位)结合使用时,parseInt() 在处理非字符串时可能会产生有趣的结果。

js
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() 的替代品。它可能适用于小数

js
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() 将返回一个一位整数

js
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

浏览器兼容性

另见