JS中Number()、parseInt()和parseFloat()的區別


JS中Number()、parseInt()和parseFloat()的區別

三者的作用: 
Number(): 可以用於任何數據類型轉換成數值; 

parseInt(): 函數可解析一個字符串,並返回一個整數。

parseFloat(): 將它的字符串參數解析成為浮點數並返回;

1.Number(): 

(1)如果是Boolean值,true和false將分別轉換為1和0。 
(2)如果是數字值,只是簡單的傳入和返回。 
(3)如果是null值,返回0。 
(4)如果是undefined,返回NaN。 
(5)如果是字符串,遵循下列規則: 
  如果字符串截去開頭和結尾的空白字符后,不是純數字字符串,那么最終返回結果為NaN。 
  如果是字符串中只包含數字(包括前面帶正號或負號的情況),則將其轉換為十進制數值,即“1”變成1,“123”會變成123,而“011”會變成11(前導的零被忽略了); 
  如果字符串中包含有效的浮點格式,如“1.1”,則將其轉換為對應的浮點數值(同樣也會忽略前導零); 
  如果字符串中包含有效的十六進制格式,例如”0xf”,則將其他轉換為相同大小的十進制整數值; 
  如果字符串是空的(不包含任何字符),則將其轉換為0; 
  如果字符串中包含除上述格式之外的字符,則將其他轉換成NaN. 
(6)如果是對象,則調用對象的valueOf()方法,然后依照前面的規則轉換返回的值。如果轉換的結果是NaN,則調用的對象的toString()方法,然后再次依照前面的規則轉換返回的字符串值。

 1 var num1=Number("Hello World");  //NaN
 2 
 3 var num2=Number("");             //0
 4 
 5 var num3=Number("000011");       //11
 6 
 7 var num4=Number(true);           //1
 8 
 9 var num5=Number(false);           // 0
10 
11 var num6=Number("num123")       //NaN

2.parseInt(): 

parseInt() 函數可解析一個字符串,並返回一個整數。 

  當參數 radix 的值為 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。

  當忽略參數 radix , JavaScript 默認數字的基數如下:

    如果 string 以 "0x" 開頭,parseInt() 會把 string 的其余部分解析為十六進制的整數

    如果 string 以 0 開頭,那么 ECMAScript v3 允許 parseInt() 的一個實現把其后的字符解析為八進制或十六進制的數字。

    如果 string 以 1 ~ 9 的數字開頭,parseInt() 將把它解析為十進制的整數。

  提示和注釋

  注意: 只有字符串中的第一個數字會被返回。

  注意: 開頭和結尾的空格是允許的。

  注意:如果字符串的第一個字符不能被轉換為數字,那么 parseFloat() 會返回 NaN。

  注意:在字符串以"0"為開始時舊的瀏覽器默認使用八進制基數。ECMAScript 5,默認的是十進制的基數。

  下面來看具體的實例吧:

下面再來一個稍微難點的:

很奇怪有木有,其實是這樣的,當小數點后的0的個數小於等於5個時,會采用字面量形式直接表示,當小數點后0的個數大於5個時,會采用科學計數法來表示,即:0.000005不會采用科學計數法,而0.0000005則會轉換為5e-7,parseInt方法不會將"e"視為數字,因此只是將5轉換為10進制,還是5。

  同理,當小數點前數字位數為21及以下的時候,會采用字面量形式直接表示,而當小數點前數字位數大於21的時候。會采用科學計數法,因此6000000000000000000000會轉換為科學計數法,為6e+21,將6轉換為10進制還是6

下面是進制轉換實例

 

3.parseFloat() :

parseFloat() 函數可解析一個字符串,並返回一個浮點數。

該函數指定字符串中的首個字符是否是數字。如果是,則對字符串進行解析,直到到達數字的末端為止,然后以數字返回該數字,而不是作為字符串。

提示和注釋

注意: 字符串中只返回第一個數字。

注意: 開頭和結尾的空格是允許的。

注意: 如果字符串的第一個字符不能被轉換為數字,那么 parseFloat() 會返回 NaN

1 parseFloat("1234blue");    // 1234.0 
2 
3 parseFloat("22.34.5");    // 22.34  
4 
5 parseFloat("0908");    //908  
6 
7 parseFloat("blue");    // NaN 
8 
9 parseFloat("bl222");    // NaN  

 

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

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

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

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

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com