與數值相關的全域性方法
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
。
如果字串以0x
或0X
開頭,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
。如果第二個引數是0
、undefined
和null
,則直接忽略。
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