ES6之數值的擴展

ES6對於數值的擴展大部分是方法,屬性會比較少。算法

以前說過,嚴格模式八進制不能使用前綴0表示,ES6規定必須使用0o。ES6提供了二進制和八進制的新寫法:bash

console.log(0b111110111 === 503); // true

console.log(0o767 === 503); // true

 

Number.isFinite(), Number.isNaN():

Number.isFinite()用來檢查參數相似是不是數值,不是的都返回false:

console.log(Number.isFinite(15));// true

console.log(Number.isFinite(0.8));// true

console.log(Number.isFinite(NaN));// false

console.log(Number.isFinite('foo'));// false

console.log(Number.isFinite('15'));// false

console.log(Number.isFinite(true));// false

Number.isNaN()用來檢查是不是NAN,不是的返回false:

console.log(Number.isNaN(15));// false

console.log(Number.isNaN(NaN));// true
複製代碼

須要注意的是,這兩個方法和isFinite、isNaN不一樣在於,新增的兩個方法不會進行Number轉成數值:模塊化

console.log(isFinite(25)); // true

console.log(isFinite("25")); // true

console.log(Number.isFinite(25)); // true

console.log(Number.isFinite("25")); // false

console.log(isNaN(NaN)); // true

console.log(isNaN("NaN")); // true

console.log(Number.isNaN(NaN)); // true

console.log(Number.isNaN("NaN")); // false

Number.parseInt(), Number.parseFloat():
複製代碼

ES6把這兩個方法移植到Number對象上面行爲保持不變,主要是爲了逐步減小全局屬性window的方法,讓JavaScript逐步模塊化。函數

Number.isInteger():ui

判斷是否爲整數,由於JavaScript內部整數和浮點數採用一樣的存儲,.0會被視爲整數,且參數不是數值的會返回false,還有,JavaScript採用的標準,限制了精確的限度,轉成二進制位超過了53個二進制位,超過就會被丟棄,超過限制的會自動轉成0:spa

Number.EPSILON:code

以前就分享過,全部的程序計算都有一些偏差的存在,好比:cdn

console.log(0.1 + 0.2);//0.30000000000000004對象

EPSILOW就是用來設置偏差可以接受的範圍,解釋起來就是1 與大於 1 的最小浮點數之間的差:ip

function err (l, r) {  

  return Math.abs(l - r) < Number.EPSILON * Math.pow(2, 2);

}

console.log(0.1 + 0.2 === 0.3); // false

console.log(err(0.1 + 0.2, 0.3)); // true

 

Number.isSafeInteger():
複製代碼

JavaScript可以準確表示的整數範圍是-2^53到2^53之間(不含兩個端點),超過就沒法精確表示,ES6引入Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER這兩個常量,用來表示這個範圍的上下限。而這個方法就是用來判斷是否落在這個範圍內。

Math.trunc():

去除一個數的小數部分,返回整數部分,會先使用Number方法轉成數值,而parseInt 函數將其第一個參數轉換爲字符串,解析它,並返回一個整數或NaN。若是不是NaN,返回的值將是做爲指定基數(基數)中的數字的第一個參數的整數:

console.log(parseInt('13.14g'));//13

console.log(Math.trunc('13.14g'));//NaN

console.log(parseInt(6.022e23)); // 6

console.log(Math.trunc(6.022e23)); // 6.022e+23

console.log(parseInt(0.00000060));//6

console.log(Math.trunc(0.00000060));//0 
複製代碼

Math.sign():

用來判斷一個數究竟是正數、負數、仍是零。對於非數值,會先將其轉換爲數值。沒法轉爲數值的值,會返回NaN:

整數返回+1

負數返回-1

0返回0

-0返回-0

沒法轉成數值的返回NaN

Math.cbrt()計算一個數的立方根,對於非數值也是先調用Number方法轉成數值。沒法轉成數值的返回NaN。

Math.clz32()方法將參數轉爲 32 位無符號整數的形式,而後這個 32 位值裏面有多少個前導 0。

Math.imul方法返回兩個數以 32 位帶符號整數形式相乘的結果,返回的也是一個 32 位的帶符號整數。

Math.fround方法返回一個數的32位單精度浮點數形式。

Math.hypot方法返回全部參數的平方和的平方根。

Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。

Math.log1p(x)方法返回1 + x的天然對數,即Math.log(1 + x)。若是x小於-1,返回NaN。

Math.log10(x)返回以 10 爲底的x的對數。若是x小於 0,則返回 NaN。

Math.log2(x)返回以 2 爲底的x的對數。若是x小於 0,則返回 NaN。

Math.sinh(x) 返回x的雙曲正弦(hyperbolic sine)

Math.cosh(x) 返回x的雙曲餘弦(hyperbolic cosine)

Math.tanh(x) 返回x的雙曲正切(hyperbolic tangent)

Math.asinh(x) 返回x的反雙曲正弦(inverse hyperbolic sine)

Math.acosh(x) 返回x的反雙曲餘弦(inverse hyperbolic cosine)

Math.atanh(x) 返回x的反雙曲正切(inverse hyperbolic tangent)

這些方法我以爲在寫是吧算法的時候去好好了解就行了,如今只要知道有這些東西就行了。

新增指數運算符**,須要注意的是是右結合,多個連用的時候,從右邊開始計算:

console.log(2 ** 3 ** 2);//512

相關文章
相關標籤/搜索