1 二進制和八進制表示法
ES6提供了二進制和八進制數值的新寫法,分別用前綴0b(或0B)和0o(或0O)表示
0b111110111 === 503 // true
0o767 === 503 // true
如果將0b和0o前綴的字符串數值轉爲十進制,要使用Number方法
Number('0b111') // 7
Number('0o10') // 8
2 Number.isFinite(),Number.isNaN()
ES6在Number對象上,提供了Number.isFinite() 和 Number.isNaN()兩個方法。
Number.isFinite()用來檢查一個數值是否爲有限的(finite)
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
注意: 如果參數類型不是數值,Number.isFinite一律返回false
Number.isNaN() 用來檢查一個值是否爲NaN
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true' / 0) // true
Number.isNaN('true' / 'true') // true
注意: 如果參數類型不是數值,Number.isFinite一律返回false
總結: 它們與傳統的全局方法isFinite()和isNaN()的區別在於,傳統方法先調用Number()方法將非數值轉爲數值,在進行判斷;而這兩個新方法只對數值有效,Number.isFinite()對於非數值一律返回false,Number.isNaN()只有對於NaN才返回true,非NaN一律返回false
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
3 Number.parseInt(),Number.parseFloat()
ES6將全局方法parseInt()和parseFloat(),移植到Number對象上面,行爲完全保持不變。
// ES6的寫法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45
目的是逐步減少全局性方法,使得語言逐步模塊化
Number.parseInt === parseInt
Number.parseFloat === parseFloat
4 Number.isInteger()
Number.isInteger()用來判斷一個數值是否爲整數
Number.isInteger(25) // true
Number.isInteger(25.1) // false
JavaScript內部,證書和浮點數採用的是同樣的存儲方法,所以25和25.0被視爲同一個值。
Number.isInteger(25) // true
Number.isInteger(25.0) // true
如果參數不是數值,Number.isInteger返回false
Number.isInteger() // false
Number.isInteger(null) // false
Number.isInteger('15') // false
Number.isInteger(true) // false
注: 如果對數據精度要求較高,不建議使用Number.isInteger()判斷一個數值是否爲整數,會照成誤判
Number.isInteger(3.0000000000000002) // true
5 Number.EPSILON
ES6在Number對象上,新增一個極小的常量Number.EPSILON;Number.EPSILON實際上是JavaScript能夠表示的最小精度,誤差如果小於這個值,就可以認爲是不存在誤差。因爲浮點數的計算是不準確的。
0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 === 0.3 // false
因此,Number.EPSILON的實質是一個可以接受的最小誤差範圍。以下是一個誤差檢查範圍
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
1.1 + 1.3 === 2.4 // false
withinErrorMargin(1.1 + 1.3, 2.4) // true
6 安全整數和Number.isSafeInteger()
Javascript能夠準確表示的整數範圍在-2^53到2^53之間(不含兩個端點),超過這個範圍,無法精確表示這個值。
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
上面代碼中,超出2的53次方之後,就不準確了
ES6中引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER這兩個變量,用來表示這個範圍上下限。
Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 // true
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER // true
Number.isSageInteger()用來判斷一個整數是否落在這個範圍之內
Number.isSafeInteger('a') // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false
7 Math對象的擴展
(1)Math.trunc方法用於去除一個數的小數部分,返回整數部分
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
對於沒有部署這個方法的環境,可以使用下面的代碼模擬:
Math.trunc = Math.trunc || function(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
};
(2)Math.sign()
Math.sign方法用於就判斷 一個數到底是正數,負數,還是零。
返回五種值:
–參數爲正數,返回+1;
–參數爲負數,返回-1;
–參數爲 0,返回0;
–參數爲-0,返回-0;
–其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
(3)Math.cbrt()
Math.cbrt方法用於計算一個數的立方根
Math.cbrt(-1) // -1
Math.cbrt(0) // 0
Math.cbrt(1) // 1
Math.cbrt(2) // 1.2599210498948734
(3)Math.clz32()
Javascript的整數使用32位二進制表示,Math.clz32方法返回一個數的32位無符號整數形式有多少個前導0.
Math.clz32(0) // 32
Math.clz32(1) // 31
Math.clz32(1000) // 22
Math.clz32(0b01000000000000000000000000000000) // 1
Math.clz32(0b00100000000000000000000000000000) // 2
(3)Math.imul()
Math.imul方法返回兩個數以32位帶符號整數形式相乘的結果,返回的也是一個32位的帶符號整數。
Math.imul(2, 4) // 8
Math.imul(-1, 8) // -8
Math.imul(-2, -2) // 4
本博客內容摘抄自
阮一峯老師寫的ECMAScript6入門一書