一、ES6對Number對象新增了isInteger函數、極小常量Number.EPSILON、安全整數;

二、window對象下的4個函數移植到了Number對象下;三、Math對象擴展了17個新函數

今天來學習一下es6中數值的擴展。在學習之前,我們先來回顧一下數值中舊的規範和使用方式(es5):

傳統的寫法(es5中

全局函數:isNaN函數,isFinite函數,parseInt函數,parseFloat函數等

例如(isNaN函數):

以上兩種寫法均可,isNaN是全局函數,本身就是屬於window對象下的一個方法,所以大部分人會使用第一種寫法。

但是在ES6的標準中,isNaN方法被移植到了Number對象上,也就是原本屬於全局對象window下的函數,現在屬於Number對象上了,同樣被處理的函數還有isFinite函數,parseInt函數,parseFloat函數。

被移植後的函數使用方式是這樣的:

在使用之前必須指明它是Number對象下的函數,否則會被默認為window下的函數。

新的寫法(es6)

1、新特性:Number.isNaN函數--用於判斷傳入的是否是非數值

  • 新的寫法與舊的寫法有什麼區別呢?

傳統的isNaN函數會把非數值的參數轉化成數值再進行判斷,而Number. isNaN只對數值類型有效,非數值類型的參數一律返回false。

  • 所以我們在使用這個函數到時候還要小心,當返回false的時候,不一定就是一個數值,有可能是一個非數值類型的參數。

2、新特性:Number.isFinite函數--用來檢查一個數值是否非無窮

  • Infinity是window對象下的一個常量,表示一個無窮數;
  • isFinite函數跟isNaN函數一樣,也只是對數值類型有效,對非數值類型的參數一律返回false。

3、新特性:Number.parseInt函數--解析一個字元串,返回一個整數

(parseInt函數同樣是從window對象下移植到Number對象下,但是它的作用沒有任何變化。)

4、新特性:Number.parseFloat函數--解析一個字元串,並返回一個浮點數

  • 以上4個函數都是在window對象下,移植到了Number對象下,你可能會跟我一樣好奇:好端端地為什麼好移植到其他地方去,這樣做的目的是什麼?

其實這麼做的目的是慢慢地減少全局性的函數,把全局函數合理地規划到其他對象下,漸漸實現語言的模塊化。

5、新特性:Number.isInteger函數--用來判斷是否是整數。

在javascript內部對整數和浮點數採用一樣的存儲方式,因此小數點後如果都是0的浮點數,都會被認為是整數:

6、極小常量(Number.EPSILON)--常量:定義一個極小的數值

  • 幹嘛要定義一個這樣的數值,在什麼情況下會用它呢?

Number.EPSILON的出現是用來判斷浮點數的計算誤差,如果浮點數計算得到的誤差不超過Number.EPSILON的值,就表示可以接受這樣的誤差。

7、安全整數(Number.isSafeInteger)

JavaScript能夠準確表示的整數範圍在-2^53到2^53之間,超過這個範圍,無法精確表示這個值。故稱之為不安全。

  • ES6定義了兩個常量來表示這個範圍的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。此外,如果給你一個數值,你不知道它是否超出了這個安全範圍,你可以使用ES6給我們新增的一個函數Number.isSafeInteger來進行判斷.

ES6給數值帶來的擴展,除了對Number對象進行了擴展,還對Math對象進行了擴展。ES6給Math對象新增了17個函數,接下來簡單介紹幾個相關擴展:

es5:

Math.random();

//結果:隨機數0.8897368770341108

es6:

1、新特性:Math.trunc函數--用於去除一個數的小數部分,返回整數部分。

2、新特性:Math.sign函數--用來判斷一個數到底是正數、負數、還是零。

3、新特性:Math.cbrt函數--用於計算一個數的立方根。

除了這三個函數以外,剩下的新增函數都是一些高中時期的數學方法,只不過是ES6將他們的運算封裝成一個方法,方便大家使用,也算是開發者的福音。

它們分別是:

Math.acosh(x) 返回 x 的反雙曲餘弦。

Math.asinh(x) 返回 x 的反雙曲正弦。

Math.atanh(x) 返回 x 的反雙曲正切。

Math.clz32(x) 返回 x 的 32 位二進位整數表示形式的前導 0 的個數。

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

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

Math.expm1(x) 返回 e?x - 1。

Math.fround(x) 返回 x 的單精度浮點數形式。

Math.hypot(...values) 返回所有參數的平方和的平方根。

Math.imul(x, y) 返回兩個參數以 32 位整數形式相乘的結果。

Math.log1p(x) 返回 1 + x 的自然對數。

Math.log10(x) 返回以 10 為底的x的對數。

Math.log2(x) 返回以 2 為底的 x 的對數。

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

這麼多數學方法,估計很多人都會懵逼,根本記不住這麼多,但是沒關係,我們也不需要去死記硬背它們,我們只需要記住ES6為Math對象擴展了很多數學方法就可以了。等真正使用到的時候,我們再去查找資料就可以啦。

總結:ES6對Number對象新增了isInteger函數、極小常量Number.EPSILON、安全整數;還將window對象下的4個函數移植到了Number對象下;此外,對Math對象擴展了17個新函數

推薦閱讀:

相关文章