JavaScript的数值转换函数——parseInt

有 3 个函数可以把非数值转换为数值: Number()、 parseInt() 和 parseFloat()。转型函数 Number() 可以用于任何数据类型,parseInt() 和  parseFloat() 函数则专门用于把字符串转换成数值。这里说说 parseInt() 函数。

parseInt() 函数更多是看其是否符合数值模式。

1、它会忽略字符串前面的空格,直至找到第一个非空格字符。

2、如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN;

3、如果第一个字符是数字字符, parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。

举个例子

var num1 = parseInt(12)       //12
var num2 = parseInt("12")     //12
var num3 = parseInt(" 12 ")   //12
var num4 = parseInt("12abc")  //12
var num5 = parseInt("abc12")  //NaN
var num6 = parseInt(" ")      //NaN
var num7 = parseInt("-12abc") //-12
var num8 = parseInt("-12.3")  //-12

如果字符串中的第一个字符是数字字符, parseInt()也能够识别出各种整数格式(十进制、八进制和十六进制数)。

1、字符串以 1 ~ 9 的数字开头,会把它解析为十进制的整数。

2、字符串以"0"开头且后跟数字字符,则会将其当作一个八进制数来解析。

3、字符串以"0x"开头且后跟数字字符,就会将其当作一个十六进制整数。

举个例子

var num1 = parseInt(12)   //12
var num2 = parseInt(012)  //10
var num3 = parseInt(0x12) //18

num1:10进制数转为10进制;

num2:8进制数转为10进制;

num3:16进制数转为10进制。

tip:在使用 parseInt() 解析像八进制字面量的“0”开头的字符串时, ECMAScript 3 和 5 存在分歧。ECMAScript 3 使用的是8进制,ECMAScript 5使用的是十进制。例如:
var num = parseInt("070"); //ECMAScript 3 认为是 56(八进制), ECMAScript 5 认为是 70(十进制)

为了消除在使用 parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换使用的基数(即多少进制,范围为2 ~ 36)。第二个参数是用来说明要转换的字符串是什么进制,而不是 parseInt() 要将传入的字符串转换为什么进制的数(我以前一直搞错了— _ —|| ):parseInt(string, radix)

1、如果指定了 16 作为第二个参数,字符串可以不带前面的"0x"

2、如果指定了 8 作为第二个参数,字符串可以不带前面的"0"

3、第二个参数范围为2~36,不在其范围返回NaN

4、如果第二个参数省略或为0,并且不以0x开头,则会将其当作一个10进制数来解析;以0x开头,则将其当作16进制数解析。

举个例子

var num1 = parseInt("0x1A", 16) //26
var num2 = parseInt("1A", 16)   //26
var num3 = parseInt("1A")       //1
var num4 = parseInt("012", 8)   //10
var num5 = parseInt("12", 8)    //10
var num6 = parseInt("012")      //12
var num7 = parseInt(012)        //10
var num8 = parseInt("12", 1)    //NaN
var num9 = parseInt(1, 37)      //NaN
var num10 = parseInt(12, 0)     //12
var num11 = parseInt(0x12, 0)   //18

关于 parseInt() 的笔试题:

以下代码输出的是什么?

var arr=[1,2,3,2,5]; 
console.log(arr.map(parseInt));

输出:[1, NaN, NaN, 2, NaN]

解析:因为 arr.map 方法就是对于数组arr里面的每一项都去使用方法里面的函数,最后返回新数组,因为map方法会有索引,所以实际上是:

parseInt(1,0);//1,因为0表示十进制
parseInt(2,1);//不在范围内
parseInt(3,2);// 2进制,但是3不在0——2范围内,所以不符合2进制要求
parseInt(2,3);//符合,因为三进制是0-3,而2在范围内
parseInt(5,4);//4进制不包括5,所以NaN

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章