parseInt()

基线 广泛可用

此功能已得到良好建立,并且可在许多设备和浏览器版本上运行。它自以下时间起在浏览器中可用: 2015 年 7 月.

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

试试看

语法

js
parseInt(string)
parseInt(string, radix)

参数

字符串

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

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() 将诸如 0b 之类的其他前缀(在数字字面量中有效)视为普通数字。parseInt() 也不将以 0 字符开头的字符串视为八进制值。parseInt() 唯一识别的前缀是十六进制值的 0x0X——如果缺少 radix,则所有其他内容都将被解析为十进制值。Number()BigInt() 可以用来代替解析这些前缀。

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

如果基数值(如果需要则强制转换)不在 [2, 36](含)范围内,则 parseInt 返回 NaN

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

parseInt 理解正好两个符号:+ 表示正数,- 表示负数。这是在删除空格后作为解析的初始步骤完成的。如果找不到符号,则算法移至下一步;否则,它将删除符号并在字符串的其余部分上运行数字解析。

如果 parseInt 遇到在指定 radix 中不是数字的字符,它将忽略它和所有后续字符,并返回解析到该点的整数值。例如,虽然 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

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

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

parseInt 不适用于 数字分隔符

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

对非字符串使用 parseInt()

parseInt() 用于非字符串并结合较高的基数时,可能会产生有趣的结果;例如,36(它使所有字母数字字符都成为有效的数字)。

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 语言规范
# sec-parseint-string-radix

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅