[toc]
## 正則擴展
### 數值的擴展
#### 二進制和八進制新寫法
二進制和八進制分別使用前綴0b(0B)和0o(0O)表示
```
0b111110111 === 503 //true
0o767 === 503 // true
```
#### Number.isFinite(), Number.isNaN()
用來檢查Infinite和NaN兩個特殊值
Number.isFinite()用來檢查一個數值是否非無窮
```
Number.isFinite(12); //true
Number.isFinite(NaN); //false
Number.isFinite(Infinity); //false
Number.isFinite("foo"); //false
```
Number.isNaN()用來判斷一個值是否是NaN
```
Number.isNaN(NaN); //true
Number.isNaN(15); //false
Number.isNaN("15"); //false
Number.isNaN(9/NaN); //true
```
#### Number.parseInt(), Number.parseFloat()
將parseInt()和parseFloat()移植到了Number對象上,不再當成全局的方法
#### Number.isInteger()
判讀一個數是否為整數,要注意在JavaScript內部整數和浮點數使用同樣的存儲方法,所以3和3.0被視為同一個值
```
Number.isIntege(25); //true
Number.isIntege(25.0); //true
Number.isIntege(25.1); //false
Number.isIntege("15"); //false
Number.isIntege(true); //false
```
#### Number.EPSILON
新增的一個極小的常量,因為浮點數計算的誤差,如果兩個浮點數誤差小于這個值,則可以認為兩個浮點數相等
#### 安全整數和Number.isSafeInteger()
JavaScript可以準確表示的整數范圍在-2^{53}到2^{53}之間,超過這個范圍的就無法精確表示
ES6引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER兩個常量用來表示這個范圍的上下限。
Number.isSafeInteger()方法用來檢測一個整數是否在這個范圍內:
```
Number.isSafeInteger("a"); //false
Number.isSafeInteger(null); //false
Number.isSafeInteger(NaN); //false
Number.isSafeInteger(Infinity); //false
Number.isSafeInteger(-Infinity); //false
Number.isSafeInteger(3); //true
Number.isSafeInteger(1.3); //false
Number.isSafeInteger(Number.MAX_SAFE_INTEGER); //true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1); //false
```
### Math對象的擴展
- Math.trunc():用以除去小數的小數部分,只留下整數部分
- Math.sign():判斷一個數是正數,還是負數還是0
- Math.cbrt():計算一個數的立方根
- Math.clz32():返回一個數的32位無符號整數表示形式前有多少個0
- Math.imul():返回兩個數以32位帶符號整數形式相乘的結果,返回值也是一個32位帶符號的整數
- Math.fround():返回一個數的單精度浮點數表示
- Math.hypot():返回所有參數的平方和的平方根
```
Math.trunc(4.1); //4
Math.trunc(-4.1); //-4
Math.sign(10); //1
Math.sign(0); //0
Math.sign(-10); //-1
Math.cbrt(-1); //-1
Math.cbrt(0); //0
Math.cbrt(8); //2
Math.clz32(0); //32
Math.clz32(1); //31
Math.clz32(0b0100000000000000000000000000000); //0
Math.imul(2,4); //8
Math.imul(2,-4); //-8
Math.fround(0); //0
Math.fround(1); //1
Math.fround(1.337); //1.3370000123977661
Math.hypot(3,4); //5(3*3+4*4=5*5)
Math.hypot(3,4,5); //7.0710678118654755
```
#### 對數方法
- Math.expm1():返回e^x-1,即Math.exp(x)-1
- Math.log1p():返回ln(x+1),即Math.log(1+x),如果x小于-1則返回NaN
- Math.log10():返回以10為底的x的對數,如果x小于0則返回NaN
- Math.log2():返回以2為底的x的對數,如果x小于0則返回NaN
#### 三角函數方法
- Math.sinh(x):返回x的雙曲正弦
- Math.cosh(x):返回x的雙曲余弦
- Math.tanh(x):返回x的雙曲正切
- Math.asinh(x):返回x的反雙曲正弦
- Math.acosh(x):返回x的反雙曲余弦
- Math.atanh(x):返回x的反雙曲正切
#### 指數運算符號
``**``運算
```
2**2 //4
2**3 //8
```
`**=`運算
```js
let a = 2;
a **= 3; //a=8
let b = 3;
b **= 3; //b=b*b*b
```