整数和浮点数
JavaScript内部存储数字都是按64位浮点类型存储的,无论整数和小数。容易造成混淆的是,某些位运算必须要整数才可以运行,所以会自动将64位浮点数转化为32位整数。再进行位运算。在JavaScript中,1和1.0是一样的
1 == 1.0 true
0.1+0.2 == 0.3 false
0.3/0.1 = 2.99999999996
(0.3-0.2) === (0.2-0.1) false
总之,涉及小数的运算要小心
数值精度
- 在JavaScript中,浮点数的64位组成,从最左边开始
- 第1位:符号位,0代表整数,1代表负数
- 第2位到第12位:指数部分
- 第13位到第64位:小数部分(即有效数字)
- 一个64位数字在JavaScript中的表示
(-1)符号位 * 1.xxxxxx小数部分 * 2^指数部分(0-2047)
其中,符号位有1位,指数部分占11位,小数部分占52位,决定精确度的是52位小数部分,IEEE 754规定,有效数字第一位默认是1,不保存在64位之中,也就是说有效数字的形式为1.xxxxxx,其中xxxxxxxx的部分保存在64位浮点数中,因此,JavaScript能提供的有效数字长度为53个二进制位。 - 数值范围
JavaScript能够表示21024到2-1023(开区间),超过这个范围的数将无法表示。如果一个数大于等于2的1024次方,就会发生“正向溢出”,则JavaScript无法表示这么大的数字就会返回Infinity
如果一个数字小于等于2的-1075次方(指数部分最小值-1023,再加上小数部分的52位),那么就会发生为“负向溢出”,会直接返回0.
数值的表示法
JavaScript中的数字可以用数值直接表示例如35(十进制),也可以是0xff(十六进制)。也可以采用科学计数法来表示例如,
123e3
123e-3
数值的进制
- 二进制:前缀0b或者0B
- 八进制:0o或者0O
- 十进制:没有前缀
- 十六进制:0x或者0X
特殊数值
NaN
-
NaN:表示(Not a Number)
typeof NaN 返回number -
NaN不等于任何数值,包括它本身
Intifity
- Intifity表示无穷,用来表示两种情况,一种是数值太大,另一种是数值太小,此外,一个非零数除以零返回的也是NaN
- Intifity遵循四则运算
与数值相关的全局方法
parseInt
- parseInt():将字符串转化为--整数--,如果字符串中有空格会自动删去空格,如果不是字符串会先转化为字符串
- 转化的时候会从第一个字符开始转化,如果转化过程中转化不下去,会返回已经转化好的部分
- 如果第一个字符串不是数字,无法转化则会直接返回NaN
- 不支持科学计数法
- 如果以0x开头,会自动按照十六进制转化
- 进制转化:parseInt默认第二个参数是10,即转化成十进制数,此外还可以传其他整数,这个数必须是2到36之间,才有意义,否则会返回NaN,如果第二个参数是null或者undefined则直接忽略。
parseFloat
- 用于将一个字符串转化为浮点数
- 支持科学计数法
isNaN
- 可以判断传入的参数是否是NaN,这个方法只对数值有效。
- 使用isNaN时最好判断一下类型
- 因为NaN是唯一不等于自身的值这个特点,判断是否为NaN的最可靠的方法是return value !=== value
isFinite
- isFinite返回一个Boolean类型的值,用来判断某个值是否为正常的数值
isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false