使用最小精度值计算浮点数
Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON; //true
:::success
Number.EPSILON 表示1与大于1的最小浮点数之间的差值。即代表着JavaScript能表示的最小精度范围
当左边减去右边小于最小精度范围时,代表着处于可接受的误差范围内,所以可以判定相等
:::
js大数
9007199254740995 === 9007199254740996 // true
:::info js中最大数值范围为 -2^53+1 ~ 2^53 - 1 ,也就是 9007199254740991. 超出这个范围的数值就会出现进度问题,于是就会出现上面那个情况。 :::
与零相关的计算
0/0 // NaN 1/0 // Infinity 1/-0 // -Infinity -1/0 // -Infinity -1/-0 // Infinity
:::success 在js中零当除数并不会报错,而且正零和负零是两个不同的数值
- 正数除以正零时,结果会得到正无穷
- 负数除以正零时,结果会得到负无穷
- 正数除以负零时,结果会得到负无穷
- 负数除以负零时,结果会得到正无穷
- 零除以零时,会得到NaN :::
1.toString()错误
1.toString() // Uncaught SyntaxError: Invalid or unexpected token
:::success
在js中 整数数值后接. 会被认为是整数的小数点 也就是1. 会被解析为 1.0 1.toString()
因为.属于数字,所以这段会被当成字符串变量处理, 字符串变量不能以数字开头,所以会报错
:::
解决方法: 1..toString()
010的异常解析
010 // 8
:::success 在js中,以零开头的数字,且没有大于8的数字,那么js会将该数字解析为八进制 :::