JavaScript数值转换

来源:互联网 发布:matlab数组求和函数 编辑:程序博客网 时间:2024/06/15 14:33

有3个函数可以把非数值转换成数值:Number()、parseInt()、parseFloat(),第一个函数即转型函数Number()可以用于任何数据类型,而另两个函数专门用于把字符串转换成数值,这三个函数对于同样的输入会有不同的结果。

一、转型函数Number(),转换规则如下

1、如果是Boolean值,true和false将分别被转换为1和0

2、如果是数字值,只是简单的传入和返回。

3、如果是null值,返回0。

4、如果是undefined,返回NaN。

5、如果是字符串,遵循以下规则:

如果字符串中只包含数字,则将其转换为十进制数值,即"123"会变成123,"1"会变成1,而"011"会变成11(注意:前面的0被忽略了);

如果字符串中包含有效的浮点数,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导0);

如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值。

如果字符串是空的,则将其转换为0。

如果字符串中包含除上述格式之外的字符,则将其转换为NaN。

6、如果是对象,则调用对象的valueOf()方法,然后按照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次按照前面的规则转换返回的字符串值。

下面给出几个具体例子:

var num1 = Number('Hello world!'); //NaN

var num2 = Number(''); //0 

var num3 = Number('000011'); //11 

var num4 = Number(true); //1

二、parseInt()函数

由于Number函数处理字符串复杂且不合理,因此处理整数更常用parseInt()函数,parseInt()函数在转换字符串时,更多的看其是否符合数值模式,它会忽略字符串前面的空格,直至找到第一个非空格字符。

1、如果第一个字符不是数字,也不是负号,parseInt()就会返回NaN,也就是说,用parseInt()转换空字符串也会返回NaN(Number对空字符串返回0)

2、如果第一个字符是数字,parseInt()会继续解析后面的,直至解析完所有或者遇到了一个非数字字符才停止。例如"1234blue"会被转换成1234,"blue"会被忽略,类似的,"22.5"会被转换成22,因为小数点是非数字字符。

parseInt()也能识别出各种格式的整数如八进制和十六进制,也就是说,如果字符串以"0x"或"0"开头且后跟数字字符,会将其看作十六进制整数或八进制整数,返回的结果是十进制整数。

下面是一些例子:

var num1 = parseInt('1234blue'); //1234
var num2 = parseInt(''); //NaN
var num3 = parseInt('0xA'); //10  
var num4 = parseInt('22.5'); //22  
var num5 = parseInt("070"); //70
//在ES3中输出结果为56,但在ES5中parseInt()已不具备解析八进制的能力,因此前导的0会被认为无效,从而得到70
//为了消除这个困惑,parseInt()有第二个参数,可指定基数(即多少进制)
var num5 = parseInt("070", 8); //56
var num6 = parseInt('70'); //70
var num7 = parseInt('0xf'); //15

我们要明确指定基数,多数情况下,我们解析的都是十进制数值,因此始终将10作为第二个参数是必要的。

三、parseFloat()函数

类似,parseFloat()也是从头到尾解析,直至遇到无效的字符为止,也就是说,字符串中第一个小数点是有效的,而第二个小数点就无效了,因此它后面的字符串也将被忽略,例如"22.34.5"将会被转换为22.34

1、parseFloat()只能解析十进制数值,它没有第二个参数的用法

2、它也始终都会忽略前导0,所以十六进制字符串始终会被转换为0

3、如果字符串包含的是可解析为整数的数(即没有小数点,或小数点后都是0),parseFloat()会返回整数

如下是几个例子:

var num1 = parseFloat('1234blue'); //1234(整数)
var num3 = parseFloat('0xA'); //0
var num4 = parseFloat('22.5'); //22.5
var num5 = parseFloat("22.35.6"); //22.35
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat('3.125e7'); //31250000



0 0
原创粉丝点击