1、概述
JavaScript内容,所以的数字都是以64位浮点数形式储存的,即使整数也是一样的。所以,1
与1.0
是相同的,是同一个数。JavaScript语言的底层没有整数,都是64位浮点数。如果做整数运算时,JavaScript会自动把64位浮点小数,转成32位整数,然后在进行计算。
0.1 + 0.2 === 0.3 // false 0.3 / 0.1 // 2.9999999999999996 (0.3 - 0.2) === (0.2 - 0.1) // false
2、数值的进制
使用字面量(literal)直接表示一个数值时,JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。 - 十六进制:有前缀
0x
或0X
的数值。 - 二进制:有前缀
0b
或0B
的数值。
JavaScript 内部会自动将八进制、十六进制、二进制转为十进制:
0xff // 255 0o377 // 255 0b11 // 3
如果八进制、十六进制、二进制的数值里面,出现不属于该进制的数字,就会报错
0xzz // 报错 0o88 // 报错 0b22 // 报错
3、NaN
(1)含义
NaN
是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
5 - 'x' // NaN
0
除以0
也会得到NaN
。
0 / 0 // NaN
需要注意的是,NaN
不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number
,使用typeof
运算符可以看得很清楚。
typeof NaN // 'number'
(2)运算规则
NaN不等于任何值,包括他本身
NaN === NaN // false
数组的indexOf
方法内部使用的是严格相等运算符,所以该方法对NaN
不成立。
[NaN].indexOf(NaN) // -1
NaN
在布尔运算时被当作false
。
Boolean(NaN) // false
NaN
与任何数(包括它自己)的运算,得到的都是NaN。
NaN + 32 // NaN NaN - 32 // NaN NaN * 32 // NaN NaN / 32 // NaN
4、与数值相关的全局方法
parseInt():用于将数字符串转为整数
parseFloat():用于将一个字符串转为浮点数
isNaN():用来判断一个数值是否是NaN
isNaN(NaN) // true isNaN(123) // false
但是,isNaN
只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN
,所以最后返回true
,这一点要特别引起注意。也就是说,isNaN
为true
的值,有可能不是NaN
,而是一个字符串。
isNaN('Hello') // true // 相当于 isNaN(Number('Hello')) // true