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
是否返回 NaN
。NaN
参与的数学运算其结果总是 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
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition (ECMA-262) | Standard | Initial 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 | |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | ? | (Yes) |
Parses leading-zero strings as decimal, not octal | (Yes) | ? | 21 | (Yes) (in standards mode) | ? | (Yes) |
Feature | Android | Chrome for Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Parses leading-zero strings as decimal, not octal | ? | ? | ? | 21 | ? | ? | ? |