從一道題目提及,下面這個比較的結果是true
仍是false
?javascript
javascriptMath.max() > Math.min();
在瀏覽器裏測試很快會得知它的結果是false
,這跟直觀的理解可不同,max
怎麼不比min
大呢?
這就要從Math
的max
和min
方法提及了。java
Math
的max
方法和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.max
或Math.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()
同理。