es6中關於Number類型的變化,主要有如下幾點es6
新增方法,判斷是否爲整數安全
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
新增方法,判斷是否能夠忽略的偏差函數
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
新增方法,表示js能夠安全和精確表示的最大整數,也就是IEEE-754定義的(253 - 1)es5
Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 // true Number.MAX_SAFE_INTEGER === 9007199254740991 // true
新增方法,表示js能夠安全和精確表示的最小整數,也就是IEEE-754定義的-(253 - 1)code
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER // true Number.MIN_SAFE_INTEGER === -9007199254740991 // true
新增方法,返回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
相似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
相似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
跟es5的parseInt徹底同樣,再也不介紹io
Number.parseInt === parseInt // true
跟es5的parseFloat徹底同樣,再也不介紹function
Number.parseFloat === parseFloat // true