有 3 個函數可以把非數值轉換為數值:Number()、parseInt()和 parseFloat()。第一個函數,即轉型函數 Number()可以用于任何數據類型,而另兩個函數則專門用于把字符串轉換成數值。這 3 個函數對于同樣的輸入會有返回不同的結果。
Number()函數的轉換規則如下。
- 如果是 Boolean 值,true 和 false 將分別被轉換為 1 和 0。
- 如果是數字值,只是簡單的傳入和返回。
- 如果是 null 值,返回 0。
- 如果是 undefined,返回 NaN。
- 如果是字符串,遵循下列規則:
- 如果字符串中只包含數字(包括前面帶正號或負號的情況),則將其轉換為十進制數值,即"1"會變成 1,"123"會變成 123,而"011"會變成11(注意:前導的零被忽略了);
- 如果字符串中包含有效的浮點格式,如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽
略前導零); - 如果字符串中包含有效的十六進制格式,例如"0xf",則將其轉換為相同大小的十進制整
數值; - 如果字符串是空的(不包含任何字符),則將其轉換為 0;
- 如果字符串中包含除上述格式之外的字符,則將其轉換為 NaN。
- 如果是對象,則調用對象的 valueOf()方法,然后依照前面的規則轉換返回的值。如果轉換的結果是 NaN,則調用對象的 toString()方法,然后再次依照前面的規則轉換返回的字符串值。
- 如果字符串中包含有效的浮點格式,如"1.1",則將其轉換為對應的浮點數值(同樣,也會忽
由于 Number()函數在轉換字符串時比較復雜而且不夠合理,因此在處理整數的時候更常用的是parseInt()函數。parseInt()函數在轉換字符串時,更多的是看其是否符合數值模式。它會忽略字符串前面的空格,直至找到第一個非空格字符。如果第一個字符不是數字字符或者負號,parseInt()就會返回 NaN;也就是說,用parseInt()轉換空字符串會返回 NaN(Number()對空字符返回 0)。如果第一個字符是數字字符,parseInt()會繼續解析第二個字符,直到解析完所有后續字符或者遇到了一個非數字字符。例如,"1234blue"會被轉換為 1234,因為"blue"會被完全忽略。類似地,"22.5"會被轉換為 22,因為小數點并不是有效的數字字符。
??這個函數提供第二個參數:轉換時使用的基數(即多少進制)。如果知道要解析的值是十六進制格式的字符串,那么指定基數 16 作為第二個參數,可以保證得到正確的結果,例如:var num = parseInt("0xAF", 16); //175
。實際上,如果指定了 16 作為第二個參數,字符串可以不帶前面的"0x",如下所示:
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
parseFloat()只解析十進制值。輸出可以為整數。十六進制格式的字符串始終轉化為0。例如:
parseFloat("1.0000"); //輸出1
parseFloat(0xA); // 輸出10,因為輸入為數字
parseFloat("0xA"); //輸出0,因為輸入為字符串