關於JavaScript 中 Number()、parseInt()、parseFloat()的區別的一點理解。
概述: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() 遇到小數點會停止解析,因為小數點並不是有效的數���字符。
參考文檔:
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.linuxidc.com/Linux/2017-01/139297.htm