ECMAScriptJavaScript中之数值转换

每当JavaScript中,有3个函数可以拿非数值转换为数值

1、Number()函数

Number()可以用来任意数据类型。

转换规则如下。

  • 倘是Boolean值,true和false将独家给换为1和0。
  • 一经是数字值,只是简短的流传和归。
  • 如果是null值,返回0。
  • 如果是undefined,返回Nan。
  • 如若是字符串,遵循下列规则:如果是目标,则调用对象的valueOf()方法,然后按照前的平整转换返回的值。如果换的结果是NaN,则调用对象的toString()方法,然后又遵照前的条条框框转换返回的字符串值。
    • 若是字符串中不过含有数字,则将该更换为什向前制数值,即“1”会成1,而“011”会化为11。
    • 如字符串中涵盖有效的浮点格式,如“1.1”,则用那易为对应之浮点数值。
    • 苟字符串中含有有效的十六迈入制格式,如“0xf”,则用那易为同一大小的十上前制整数值。
    • 一经字符串是空的,则以那易为0。
    • 如果字符串中包含除上述格式之外的字符,将那个更换为NaN。

看几只例证:

    var num1 = Number("Hello");  //NaN
    var num2 = Number("");      //0
    var num3 = Number("0011");  //11
    var num4 = Number(true);     //1
    var num5 = Number(1.1);     //1.1

 

注:一元加操作符的操作以及Number()函数相同。

由Number()函数在变字符串时比较复杂而且不够客观,因此当处理整数时再常用的凡parseInt()函数。

2、parseInt()函数

parseInt()函数在换字符串时,会忽略字符串前面的空格,直到找到第一单非空格字符。

要第一个字符不是数字还是负号,parseInt()
就会回NaN,同样的,用parseInt()
转换空字符串也会见返回NaN(而Number()对空字符返回0)。

一旦第一只字符是数字字符,parseInt()
会继续分析第二独字符,直到解析了所有继续字符串或者遇到了一个非数字字符。

诸如,“1234blue”会吃换成为1234,因为“blue”会于全然忽略。如果字符串中率先独字符是数字字符,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或者56
    var num6 = parseInt("70");          //70
    var num7 = parseInt("0xf");         //15

当ECMAScript3
JavaScript引擎中,“070”被算八上制字面量,因此转换后是十进制56。而在ECMAScript5
JavaScript引擎中,parseInt()已经休负有分析八进制的能力,因此带的零会被看没用,从而将此值当成“0”,结果虽抱十进制的0。为了免除在运用parseInt()函数时或者造成上述的疑惑,可以吧夫函数提供次单参数:转换时采取的基数(即多少进制)。

扣押几乎独例:  

  var num1 = parseInt("AF", 16);          //175
  var num2 = parseInt("AF");            //NaN
  var num3 = parseInt("10", 2);           //2  (按照二进制解析)
  var num4 = parseInt("10", 8);           //8  (按照八进制解析)
  var num5 = parseInt("10", 10);          //10  (按照十进制解析)
  var num6 = parseInt("10", 16);          //16  (按照十六进制解析)

流动:多数状况下,我们只要分析的还是十进制数价值,因此拿10用作次个参数是好有必要的。

3、parseFloat()函数

跟parseInt() 函数类似,parseFloat()
也是于第一独字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析及遇见一个不算的浮点数字字符为止。也就是说,字符串中率先个小数点是卓有成效的,而第二单稍数点就是无用的了,它后的字符串将被忽略。例如,“22.3.34”将见面被更换为22.3。

除第一单稍数点有效之外,parseFloat()parseInt()的次只分别在她一直忽略前导0。parseFloat()可以辨认所有浮点数值格式,也包括十上制整数格式。但十六进制的字符串则一直被撤换为0。

出于parseFloat()只分析十进制,因此它没有第二单参数指定基数的用法

而字符串中隐含的是一个可解析为整数的累累(没有小数点,或者小数点后还是心碎),parseFloat()
会返回整数。

关押几个例证:

        var num1 = parseFloat("1234blue");    //1234
        var num2 = parseFloat("");            //NaN
        var num3 = parseFloat("0xA");         //0
        var num4 = parseFloat("22.5");        //22
        var num5 = parseFloat("22.34.5");    //22.34
        var num6 = parseFloat("09.5");       //9.5
        var num7 = parseFloat("3.125e7");     //31250000