由于 JavaScript 采用 IEEE 754 标准,数值存储为64位双精度格式,数值精度最多可以达到 53 个二进制位(1 个隐藏位与 52 个有效位)。如果数值的精度超过这个限度,第54位及后面的位就会被丢弃,这种情况下,Number.isInteger
可能会误判。
Number.isInteger(3.0000000000002) //结果为true 因为数值的超过了这个限度,所以后面这个2给忽略了
如果一个数值的绝对值小于Number.MIN_VALUE
(5E-324),即小于 JavaScript 能够分辨的最小值,会被自动转为 0。这时,Number.isInteger
也会误判。
Number.isInteger(5E-324) // false
Number.isInteger(5E-325) // true 因为5E-325的值太小了,所以会被自动换成0,所以返回true
总之,如果等于数据精度的要求过高,不推荐使用Number.isInteger
,因为会忽略超过限度的值。