首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

parseInt

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

语法

代码语言:javascript
复制
parseInt(string, radix);

参数

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

radix一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。比如参数"10"表示使用我们通常使用的十进制数值系统。始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常将值默认为10

返回值

返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
parseInt('Hello', 8); // Not a number at all
parseInt('546', 2);   // Digits are not valid for binary representations

以下例子均返回 -15:

代码语言:javascript
复制
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:

代码语言:javascript
复制
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // Very large number becomes 4
parseInt(0.00000000000434, 10); // Very small number becomes 4

下例中全部返回 224:

代码语言:javascript
复制
parseInt('0e0', 16);

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

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

代码语言:javascript
复制
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参数的值.

一个更严格的解析函数

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

代码语言:javascript
复制
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

?

?

?

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com