在线文档教程

parseInt

parseInt

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

语法

parseInt(string, radix

参数

string要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用  ToString抽象操作)。字符串开头的空白符将会被忽略。

返回值

返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回NaN

描述

parseInt函数将其第一个参数转换为一个字符串,解析它,并返回一个整数或NaN。如果不是NaN,则返回的值将是以指定基数(base)中的数字形式表示的第一个参数的整数。例如,基数10表示从十进制数,8个八进制数,16个十六进制数等转换而来。对于上面10的基数,字母表中的字母表示数字大于9

如果parseInt遇到一个数字的字符,它会忽略它和所有后续字符,并返回到该点,解析其整数值。parseInt将数字变为整数值。会忽略前后空格。

一些非常大或非常小数字(包括一些用e表示的数字,例如6.022e23)使用parseInt截断会产生不切合实际的结果。parseInt不应该被用作Math.floor()的替代品。

如果基数是未定义的或0(或缺失),JavaScript将假定以下内容:

  • 如果字符串 string 以"0x"或者"0X"开头, 则基数是16 (16进制).

  • 如果字符串 string 以"0"开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值

  • 如果字符串 string 以其它任何值开头,则基数是10 (十进制)。

如果第一个字符不能被转换成数字,parseInt返回NaN

算术上, NaN 不是任何一个进制下的数。 你可以调用isNaN 来判断 parseInt 是否返回 NaNNaN 参与的数学运算其结果总是 NaN

将整型数值以特定基数转换成它的字符串值可以使用 intValue.toString(radix).

示例

使用parseInt

以下例子均返回15:

parseInt(' 0xF', 16 parseInt(' F', 16 parseInt('17', 8 parseInt(021, 8 parseInt('015', 10 // parseInt(015, 10 will return 15 parseInt(15.99, 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 are not valid for binary representations

以下例子均返回 -15:

parseInt('-F', 16 parseInt('-0F', 16 parseInt('-0XF', 16 parseInt(-15.1, 10) parseInt(' -17', 8 parseInt(' -15', 10 parseInt('-1111', 2 parseInt('-15e1', 10 parseInt('-12', 13

下例中全部返回 4:

parseInt(4.7, 10 parseInt(4.7 * 1e22, 10 // Very large number becomes 4 parseInt(0.00000000000434, 10 // Very small number becomes 4

下例中全部返回 224:

parseInt('0e0', 16

没有指定 radix 参数时的八进制解析

尽管 ECMAScript 3 已经不赞成这种做法,且 ECMAScript 5 已经禁止了这种做法,但是仍然有很多实现环境仍然把以 0 开头的数值字符串(numeric string)解释为一个八进制数。下面的例子可能返回八进制的结果,也可能返回十进制的结果。总是指定一个基数(radix)可以避免这种不可靠的行为。

parseInt('0e0' // 0 parseInt('08' // 0, '8' is not an octal digit.

ECMAScript 5 移除了八进制解析

ECMAScript 5 规范不再允许parseInt函数的实现环境把以0字符开始的字符串作为八进制数值。ECMAScript 5 陈述如下:

根据给定radix,parseInt函数产生一个由字符串参数内容解析过来的整数值。字符串中开头的空白会被忽略。如果radix没有指定或者为0,参数会被假定以10为基数来解析,如果数值以字符对0x或0X开头,会假定以16为基数来解析。

这与ECMAScript 3有所不同,ECMAScript 3仅仅是不提倡这种做法但并没有禁止这种做法。

直至2013年,很多实现环境并没有采取新的规范所规定的做法, 而且由于必须兼容旧版的浏览器,所以永远都要明确给出radix参数的值.

一个更严格的解析函数

有时采用一个更严格的方法来解析整型值很有用。此时可以使用正则表达式:

var filterInt = function(value) { if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value)) return Number(value return NaN; } console.log(filterInt('421') // 421 console.log(filterInt('-421') // -421 console.log(filterInt('+421') // 421 console.log(filterInt('Infinity') // Infinity console.log(filterInt('421e+0') // NaN console.log(filterInt('421hop') // NaN console.log(filterInt('hop1.61803398875') // NaN console.log(filterInt('1.61803398875') // NaN

规范

SpecificationStatusComment
ECMAScript 1st Edition (ECMA-262)StandardInitial definition.
ECMAScript 5.1 (ECMA-262)The definition of 'parseInt' in that specification.Standard
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'parseInt' in that specification.Standard
ECMAScript Latest Draft (ECMA-262)The definition of 'parseInt' in that specification.Living Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support(Yes)(Yes)(Yes)(Yes)?(Yes)
Parses leading-zero strings as decimal, not octal(Yes)?21(Yes) (in standards mode)?(Yes)

FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
Parses leading-zero strings as decimal, not octal???21???