es6基础系列二:Number

时间:2024-01-07 20:58:14

es6中关于Number类型的变化,主要有以下几点

Number.isInteger

新增方法,判断是否为整数

Number.isInteger(Infinity) // false
Number.isInteger(-Infinity) // false
Number.isInteger(NaN) // false
Number.isInteger(null) // false
Number.isInteger(0) // true
Number.isInteger(-10) // true
Number.isInteger(10.3) // false

Number.EPSILON

新增方法,判断是否可以忽略的误差

0.1 + 0.2 // 0.30000000000000004
0.1 + 0.2 === 0.3 // false
// 这其中的误差可以忽略,可以通过下面的函数来判断误差是否可以忽略
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON
}
withinErrorMargin(0.1 + 0.2, 0.3) // true
withinErrorMargin(0.2 + 0.2, 0.3) // false

Number.MAX_SAFE_INTEGER

新增方法,表示js可以安全和精确表示的最大整数,也就是[IEEE-754](https://en.wikipedia.org/wiki/IEEE_floating_point)定义的(253 - 1)

Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 // true
Number.MAX_SAFE_INTEGER === 9007199254740991 // true

Number.MIN_SAFE_INTEGER

新增方法,表示js可以安全和精确表示的最小整数,也就是[IEEE-754](https://en.wikipedia.org/wiki/IEEE_floating_point)定义的-(253 - 1)

Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER // true
Number.MIN_SAFE_INTEGER === -9007199254740991 // true

Number.isSafeInteger

新增方法,返回true或false,表示在js可以安全和精确表示的范围内,也就是[IEEE-754](https://en.wikipedia.org/wiki/IEEE_floating_point)定义的-(253 - 1)到(253 - 1),所谓安全就是如果超出这范围,计算的结果就很可能不正确。

Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(1) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false
9007199254740993 - 9007199254740995 // -4 但真实结果应该为-2

Number.isNaN

类似es5的isNaN,判断是否NaN,返回true或false,但值为非数字时,跟es5的isNaN有区别,isNaN会先执行一次Number方法

Number.isNaN(123) // false, integers are not NaN
Number.isNaN(Infinity) // false, Infinity is not NaN
Number.isNaN(NaN) // true, NaN is NaN
Number.isNaN('pony'/'foo') // true, 'pony'/'foo' is NaN, NaN is NaN
Number.isNaN('ponyfoo') // false, 'ponyfoo' is not NaN
isNaN('ponyfoo') // true, because Number('ponyfoo') is NaN

Number.isFinite

类似es5的isFinite,判断是否有限数,返回true或false,但值为非数字时,跟es5的isNaN有区别,isFinite会先执行一次Number方法

Number.isFinite(NaN) // false
Number.isFinite(Infinity) // false
Number.isFinite(-Infinity) // false
Number.isFinite(null) // false
Number.isFinite(0) // true
Number.isFinite(3) // true
Number.isFinite('10') // false
Number.isFinite(Math.pow(2,53)+5) // true 大于js的安全整数
isFinite(null) // true, because Number(null) is 0
isFinite('10') // true, because Number('10') is 10

Number.parseInt

跟es5的parseInt完全一样,不再介绍

Number.parseInt === parseInt // true

Number.parseFloat

跟es5的parseFloat完全一样,不再介绍

Number.parseFloat === parseFloat // true