爲何Math.max()>Math.min()的結果是false

從一道題目提及,下面這個比較的結果是true仍是falsejavascript

javascriptMath.max() > Math.min();

在瀏覽器裏測試很快會得知它的結果是false,這跟直觀的理解可不同,max怎麼不比min大呢?
這就要從Mathmaxmin方法提及了。java

Mathmax方法和min方法分別用於求一系列參數中的最大和最小值,若是傳入的參數不是數字類型,會對該參數利用Number方法進行類型轉換。看幾個例子:瀏覽器

javascriptMath.max(1,2,3,4,5); //5
Math.min(2,3,4,5,6); //2

若是參數不是有效數字:測試

javascriptMath.max(1);                             //1
Math.max(NaN);                           //NaN
Math.max("This is a fucking String");    //NaN
Math.max("5");                           //5
Math.max(true);                          //1
Math.max(undefined);                     //NaN  
Math.max(null);                          //0

接下來考慮一種狀況,假如只給Math.maxMath.min方法傳一個參數且參數是有效數字,那返回什麼?code

javascriptMath.min(5);     //5
Math.max(5);     //5
Math.max(0);     //0
Math.min(0);     //0

吶,若是隻有一個有效數字參數的話,返回值就是傳入值;這個彷佛很好理解,總共就一個值,沒得比,最大或最小確定就你了;不過,這可不是「沒得比」的狀況,咱們來試試真正的「沒得比」的狀況,ip

javascriptMath.max();
Math.min();

這就是開頭題目裏的形式,不給它傳任何參數;在控制檯裏很容易測試出來他們的值一個是Infinity,一個是-Infinity;ci

吶,關上控制檯,再想一想,哪一個的結果是Infinity,哪一個的結果是-Infinity
結果是很違反直覺的文檔

javascriptMath.max();  //-Infinity
Math.min();  //Infinity

照這麼看,就能知道爲何Math.max()>Math.min()的結果是false了;
可是爲何Math.max()結果是-Infinity,仍是很奇怪。
ECMAScript Language Specification文檔中,也只是強制規定了:get

If no arguments are given, the result (of max method)is -∞it

可是強制記一個知識點是很痛苦的,我但願能找到一個能夠解釋得通的思路;最終在這裏找到一個我以爲靠譜的解釋,
根據個人二次理解,能夠這麼解釋:

就說Math.max方法,實際上能夠認爲這個方法有一個隱含的參數,假定這個隱含的參數是x;

當咱們只傳一個參數有效數字a時,咱們寫做:Math.max(a),實際上計算的是Math.max(a,x),固然咱們知道它的結果是a

同時,不管咱們傳入的數字a是什麼,它都返回a,那麼什麼樣的x在跟任意數a比較最大的一個時,永遠返回a呢,那x只能是-Infinity了,這樣,當不傳參數執行Math.max()時,其實是Math.max(-Infinity);,結果返回-Infinity,這樣就解釋得通了。

Math.min()同理。

相關文章
相關標籤/搜索