1. 程式人生 > >與數值相關的全域性方法

與數值相關的全域性方法

parseInt()

parseInt方法用於將字串轉為整數。

parseInt('123') // 123

如果字串頭部有空格,空格會被自動去除。

parseInt('   81') // 81

如果parseInt的引數不是字串,則會先轉為字串再轉換。

parseInt(1.23) // 1
// 等同於
parseInt('1.23') // 1

字串轉為整數的時候,是一個個字元依次轉換,如果遇到不能轉為數字的字元,就不再進行下去,返回已經轉好的部分。 

parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15

上面程式碼中,parseInt的引數都是字串,結果只返回字串頭部可以轉為數字的部分。

如果字串的第一個字元不能轉化為數字(第一個數字是正負號的除外),返回NaN

parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1

 所以,parseInt的返回值只有兩種可能,要麼是一個十進位制整數,要麼是NaN

如果字串以0x0X開頭,parseInt會將其按照十六進位制數解析。

parseInt('0x10') // 16

如果字串以0開頭,將其按照10進位制解析。

parseInt('011') // 11
parseInt(1000000000000000000000.5) // 1
// 等同於
parseInt('1e+21') // 1

parseInt(0.0000008) // 8
// 等同於
parseInt('8e-7') // 8

2)進位制轉換

parseInt方法還可以接受第二個引數(2到36之間),表示被解析的值的進位制,返回該值對應的十進位制數。

預設情況下,parseInt的第二個引數為10,

parseInt('1000') // 1000
// 等同於
parseInt('1000', 10) // 1000

是十進位制轉十進位制。

下面是轉換指定進位制的數的例子。

parseInt('1000', 2) // 8
parseInt('1000', 6) // 216
parseInt('1000', 8) // 512

如果第二個引數不是數值,會被自動轉為一個整數。這個整數只有在2到36之間,才能得到有意義的結果,超出這個範圍,則返回NaN。如果第二個引數是0undefinednull,則直接忽略。

parseInt('10', 37) // NaN
parseInt('10', 1) // NaN
parseInt('10', 0) // 10
parseInt('10', null) // 10
parseInt('10', undefined) // 10

 

如果字串包含對於指定進位制無意義的字元,則從最高位開始,只返回可以轉換的數值。如果最高位無法轉換,則直接返回NaN

parseInt('1546', 2) // 1
parseInt('546', 2) // NaN

parseFloat()

parseFloat方法用於將一個字串轉為浮點數。

parseFloat('3.14') // 3.14

如果字串符合科學計數法,則會進行相應的轉換。

parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14

如果字串包含不能轉為浮點數的字元,則不再進行往後轉換,返回已經轉好的部分。 

parseFloat('3.14more non-digit characters') // 3.14

parseFloat方法會自動過濾字串前導的空格

parseFloat('\t\v\r12.34\n ') // 12.34

 如果引數不是字串,或者字串的第一個字元不能轉化為浮點數,則返回NaN

上面程式碼中,尤其值得注意,parseFloat會將空字串轉為NaN

這些特點使得parseFloat的轉換結果不同於Number函式。

parseFloat(true)  // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN