首先獻祭出一個例子圖,便于快速區(qū)別三個方法:在JavaScript中,有三個方法可以把非數(shù)值轉(zhuǎn)換成數(shù)值類型:
Number()、parseInt()和parseFloat()。
Number():可以用于任何數(shù)據(jù)類型;
parseInt()/parseFloat():主要針對把字符串轉(zhuǎn)換成數(shù)值。
他們有相通之處,但也有不同之處。此處做一個整理,方便查閱。

例子圖
Number() 的轉(zhuǎn)換規(guī)則
| 數(shù)據(jù)類型 | 規(guī)則 |
|---|---|
| Boolean | true和false將分別被轉(zhuǎn)換為1和0 |
| Number | 直接的傳入返回 |
| Null | 返回0 |
| Undefined | 返回NaN |
| String | 遵循下列規(guī)則: 1. 只包含數(shù)字,將其轉(zhuǎn)換為十進制數(shù)值: “1” -> 1,“123” ->123,“011” -> 11(忽略前導零);2. 只包含有效的浮點格式,將其轉(zhuǎn)換為對應(yīng)浮點數(shù)值: “1.1” -> 1.1,“03.14” ->3.14,“1.22.33” -> NaN;3. 只包含有效的十六進制格式,將其轉(zhuǎn)換為相同大小的十進制整數(shù)值: “0xf” -> 15;4. 空字符串(不包含任何字符或包含空格等空字符),則將其轉(zhuǎn)換為0: “” -> 0,“ ” -> 0;5. 除以上提及格式的字符,則將其轉(zhuǎn)換為NaN: “99 88” -> NaN,“99abc” -> NaN; |
| Object | 代碼測試時NaN,理論上還得查閱一番資料233 |
parseInt() / parseFloat() 的轉(zhuǎn)換規(guī)則
因為Number()方法轉(zhuǎn)換字符串的時候比較復雜,所以一般處理字符串比較常用的是parseInt() / parseFloat()。
parseInt() 的轉(zhuǎn)換規(guī)則是:
逐個解析字符串的字符,忽略前面空格,找到第一個非空格字符;若第一個字符不是數(shù)字字符或者負號,返回NaN;若第一個字符是數(shù)組字符,就繼續(xù)解析第二個字符,直到解析完所有后續(xù)字符串或者遇到了一個非數(shù)字字符。
parseFloat()的轉(zhuǎn)換規(guī)則和parseInt() 類似,區(qū)別在于parseFloat()能識別第一次出現(xiàn)的小數(shù)點。
parseInt() 方法還有基模式,可以把二進制、八進制、十六進制或其他任何進制的字符串轉(zhuǎn)換成整數(shù)。
(注意parseFloat()沒有基模式)。
var num2 = parseInt("AF"); //NaN
var num1 = parseInt("AF",16); //175 (按照十六進制解析)
var num3 = parseInt("10",2); //2 (按照二進制解析)
var num4 = parseInt("sdasdad"); //NaN
以上。