parseInt()
- parseInt用于将字符串转为整数
- 值得注意的是,转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,而是返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15
若第一个字符不能转换为数字(正负号除外),返回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
会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。
parseInt(1000000000000000000000.5) // 1
// 等同于
parseInt('1e+21') // 1
parseInt(0.0000008) // 8
// 等同于
parseInt('8e-7') // 8
parseInt还可以用于进制转换
-
parseInt
方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt
的第二个参数为10,即默认是十进制转十进制。
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('3.14more non-digit characters') // 3.14
与parseInt不同,parseFloat可以进行科学计数法的转换
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14
与parseInt可以将数字转换为字符串不同,parseFloat必须是字符串。若参数不是字符串,或第一个字符不能转换为浮点数,返回NaN
parseFloat([]) // NaN
parseFloat('FF2') // 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
isNaN()
- 可以判断一个值是否为NaN
- 值得注意的是,此函数只对数值有效,所以当传入字符串时,会返回true。所以,isNaN为true的值,可能并不是NaN,而只是一个字符串、对象或者数组
isNaN('Hello') // true
// 相当于
isNaN(Number('Hello')) // true
但是,对于空数组和只有一个数值成员的数组,函数返回false。这是因为这样的数组可以被Number函数转为数值
isNaN([]) // false
isNaN([123]) // false
isNaN(['123']) // false
- 因此,使用isNaN函数前,最好判断下数据类型
function myIsNaN(value) {
return typeof value === 'number' && isNaN(value);
}
或者,利用NaN为唯一不等于自身值的这一特性
function myIsNaN(value) {
return value !== value;
}
isFinite()
isFinite
方法返回一个布尔值,表示某个值是否为正常的数值。
isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true
除了Infinity
、-Infinity
、NaN
和undefined
这几个值会返回false
,isFinite
对于其他的数值都会返回true
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。