JavaScript中Global全局对象之字符串转整数函数parseInt()

 2015年11月29日    40     声明


JavaScript中以全局对象的形式提供了字符串转换为整数的函数parseInt(),该函数会将一个有效的字符串转换为整数,且可以进行2进制、8进制、10进制或16进制形式字符串的转换。


1. parseInt()语法结构

parseInt(string [,radix]);
  • string:被解析的字符串。如果该参数不是一个字符串,会调用toString()将其转换为字符串。字符串开头和结尾的空白符将会被忽略
  • radix:可选参数。表示转换的基数/进制,取值范围为2〜36被解析的字符串。忽略该参数时,根据转换值的形式不同可能会产生不同的结果。进行转换时,建议总是指定该参数,这样可以提高代码的可读性并且可以保证转换结果的正确性
  • 返回值:Number 或 NaN

parseInt()被做为一个全局函数提供,可以在任何需要的地方调用它。

parseInt()函数会将第一个参数(string)解析并返回一个整数或者NaN(Not a Number)。转换进,首先会判断是否是一个有效可转换字符串,如果结果不是NaN,会将第一个参数进行转换。如果提供了radix参数,会按该参数指定的进制进行转换,如果没有提供,会按string匹配进制。

parseInt()函数可以进行部分数据的转换,在匹配到第一个可转换字符后,继续进行匹配,直到字符串结尾或遇到第一个不可转换的字符,余下的字符将被忽略。

如果第一个字符不能被转换成数字(非有效字符或空格),parseInt()返回NaN,转换前可以使用isNaN()判断是否可转换。

在没有转换进制radix,或者进制为 0 时,JavaScript 会作如下处理:

  • 如果字符串 string 以"0x"或者"0X"开头,则按16进制转换
  • 如果字符串 string 以"0"开头,则按 8进制 或者 10进制)处理,具体由实现环境决定(ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。所以,建议永远都要明确给出radix参数值
  • 如果字符串 string 以其它任何值开头,则基数是10 (十进制)。


2. parseInt()的使用

进行不同进制的转换:

以下转换的返回值都是15:

parseInt(" 0xF", 16);
parseInt(" F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);
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);

以下转换的返回值都是-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);

无效的转换:

返回NaN的示例:

parseInt("Hello", 8); // 不是有效的可转换字符
parseInt("546", 2);   // 不是有效的2进制数

不指定转换基数时可能会引起歧义:

以 '0'开头的字符串,虽然 ECMAScript 5 规定使用10进制进行转换,但具体实现环境的不同确会导致不同的转换结果,所以指定radix参数非常有必要。

parseInt("0e0"); // 0 
parseInt("08"); // 0 或 8, '8'不是一个有效的8进制数,ES3中会返回8,ES5中会返回8