1. 程式人生 > 實用技巧 >JavaScript 中 Number()、parseInt()、parseFloat()的區別

JavaScript 中 Number()、parseInt()、parseFloat()的區別

Number()

  概述:Number物件由Number()構造器建立,是經過封裝的能讓你處理數字值的物件。在非構造器上下文中 (如:沒有new操作符),Number能被用來執行型別轉換。

  語法:Number(value);

  特點:

   1、如果是Boolean值,true和false值將分別被轉換為1和0。

   2、如果是數字值,只是簡單的傳入和返回。

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

   4、如果是undefined,返回NaN。

   5、如果是字串:

    a. 如果字串中只包含數字時,將其轉換為十進位制數值,忽略前導0

    b. 如果字串中包含有效浮點格式,如“1.1”,將其轉換為對應的浮點數字,忽略前導0

    c. 如果字串中包含有效的十六進位制格式,如“0xf”,將其轉換為相同大小的十進位制數值

    d. 如果字串為空,將其轉換為0

    e. 如果字串中包含除上述格式之外的字元,則將其轉換為NaN

    如果是物件,則呼叫物件的valueOf()方法,然後依照前面的規則轉換返回的值。如果轉換的結果是NaN,則呼叫物件的toString()方法,然後再依照前面的規則轉換返回的字串值。

  例項:

var num1 = Number("Hello world");    ·//NaN
var num2 = Number("");          //0
var num3 = Number("0000011");       //11
var num4 = Number(3.14fasdasf);       //Uncaught SyntaxError: Invalid or unexpected token
var num5 = Number("3.14fasdasf");    //NaN

parseInt():

  概述:parseInt()函式將給定的字串以指定基數(radix/base)解析成為整數。

  語法:parseInt(string,radix);

  引數:string:要被解析的值。如果引數不是一個字串,則將其轉換為字串。字串開頭的空白符將會被忽略。

  radix:一個2到36之間的整數值,用於指定轉換中採用的基數。比如引數"10"表示使用我們通常使用的十進位制數值系統。總是指定該引數可以消除閱讀該程式碼時的困惑並且保證轉換結果可預測。當忽略該引數時,不同的實現環境可能產生不同的結果。

  特點:

   1、如果被解析引數的第一個字元無法被轉化成數值型別,則返回

NaN。轉換空字串也會返回NaN。

   2、開頭和結尾的空白符允許存在,會被忽略,直到找到第一個非空格字元。

   3、如果第一個字元是數字字元,parseInt() 會繼續解析第二個字元,直到解析完所有後續字串或者遇到了一個非數字字元。遇到不能解析的字元和其後的字元都將被忽略。接著返回已經解析的整數部分。

  4、parseInt()方法還有基模式,可以把二進位制、八進位制、十六進位制或其他任何進位制的字串轉換成整數。

   5、基是由parseInt()方法的第二個引數指定的,所以要解析十六進位制的值,當然,對二進位制、八進位制,甚至十進位制(預設模式),都可以這樣呼叫parseInt()方法。

  例項:

var num1 = parseInt("AF",16);   //175
var num2 = parseInt("AF");     //NaN
var num3 = parseInt("10",2);    //2  (按照二進位制解析)
var num4 = parseInt("sdasdad");  //NaN

parseFloat():

  概述:parseFloat()方法將引數中指定的字串解析成為一個浮點數字並返回.

  語法:parseFloat(string)

  特點

   1、parseFloat是個全域性函式,不屬於任何物件。

   2、如果在解析過程中遇到了正負號(+或-),數字(0-9),小數點,或者科學記數法中的指數(e或E)以外的字元,則它會忽略該字元以及之後的所有字元,返回當前已經解析到的浮點數.

   3、字串首位的空白符會被忽略.如果引數字串的第一個字元不能被解析成為數字,則parseFloat返回NaN.

   4、字串中第一個小數點是有效的,而第二個小數點就是無效的了,它後面的字串將被忽略。

   5、parseFloat() 只解析十進位制,因此它沒有第二個引數指定基數的用法

   6、如果字串中包含的是一個可解析為正數的數(沒有小數點,或者小數點後都是零),parseFloat() 會返回整數。

  例項:

var num1 = parseFloat("123AF");           //123
var num2 = parseFloat("0xA");            //0
var num3 = parseFloat("22.5");            //22.5
var num4 = parseFloat("22.3.56");         //22.3
var num5 = parseFloat("0908.5");          //908.5

Number()、parseInt() 和parseFloat() 的區別:

  • Number()的強制型別轉換與parseInt()和parseFloat()方法的處理方式相似,只是它轉換的是整個值,而不是部分值。如“3.4.5”,用Number()進行強制型別轉換將返回NAN,如果確定字串值能被完整地轉換,Number()將判斷是呼叫parseInt()還是parseFloat()。

  • parseFloat() 所解析的字串中第一個小數點是有效的,而parseInt() 遇到小數點會停止解析,因為小數點並不是有效的數字字元。

  • parseFloat() 始終會忽略前導的零,十六進位制格式的字串始終會被轉換成0,而parseInt() 第二個引數可以設定基數,按照這個基數的進位制來轉換。

參考文件:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

http://www.jb51.net/article/100606.htm