es6基礎系列二:Number

es6中關於Number類型的變化,主要有如下幾點es6

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定義的(253 - 1)es5

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

Number.MIN_SAFE_INTEGER

新增方法,表示js能夠安全和精確表示的最小整數,也就是IEEE-754定義的-(253 - 1)code

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

Number.isSafeInteger

新增方法,返回true或false,表示在js能夠安全和精確表示的範圍內,也就是IEEE-754定義的-(253 - 1)到(253 - 1),所謂安全就是若是超出這範圍,計算的結果就極可能不正確。ip

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方法get

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方法it

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徹底同樣,再也不介紹io

Number.parseInt === parseInt // true

Number.parseFloat

跟es5的parseFloat徹底同樣,再也不介紹function

Number.parseFloat === parseFloat // true
相關文章
相關標籤/搜索