parseInt()
parseInt()
函数解析字符串参数并返回指定基数(数学数字系统中的基数)的整数。
试试看
语法
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
中不是数字的字符,它将忽略它和所有后续字符,并返回解析到该点的整数值。例如,虽然 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
您应该将字符串传递给BigInt()
函数,而不是带尾随 n
字符。
BigInt("900719925474099267");
// 900719925474099267n
parseInt
不适用于 数字分隔符
parseInt("123_456"); // 123
对非字符串使用 parseInt()
当 parseInt()
用于非字符串并结合较高的基数时,可能会产生有趣的结果;例如,36
(它使所有字母数字字符都成为有效的数字)。
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 语言规范 # sec-parseint-string-radix |
浏览器兼容性
BCD 表格仅在浏览器中加载