摘要:的方法和方法分別用于求一系列參數中的最大和最小值,如果傳入的參數不是數字類型,會對該參數利用方法進行類型轉換。
從一道題目說起,下面這個比較的結果是true還是false?
javascriptMath.max() > Math.min();
在瀏覽器里測試很快會得知它的結果是false,這跟直觀的理解可不一樣,max怎么不比min大呢?
這就要從Math的max和min方法說起了。
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方法傳一個參數且參數是有效數字,那返回什么?
javascriptMath.min(5); //5 Math.max(5); //5 Math.max(0); //0 Math.min(0); //0
吶,如果只有一個有效數字參數的話,返回值就是傳入值;這個似乎很好理解,總共就一個值,沒得比,最大或最小肯定就你了;不過,這可不是“沒得比”的情況,我們來試試真正的“沒得比”的情況,
javascriptMath.max(); Math.min();
這就是開頭題目里的形式,不給它傳任何參數;在控制臺里很容易測試出來他們的值一個是Infinity,一個是-Infinity;
吶,關上控制臺,再想想,哪個的結果是Infinity,哪個的結果是-Infinity?
結果是很違反直覺的
javascriptMath.max(); //-Infinity Math.min(); //Infinity
照這么看,就能知道為什么Math.max()>Math.min()的結果是false了;
但是為什么Math.max()結果是-Infinity,還是很奇怪。
在ECMAScript Language Specification文檔中,也只是強制規定了:
If no arguments are given, the result (of max method)is -∞
但是強制記一個知識點是很痛苦的,我希望能找到一個可以解釋得通的思路;最終在這里找到一個我覺得靠譜的解釋,
根據我的二次理解,可以這么解釋:
就說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()同理。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85811.html
摘要:動態規劃問題一定會具備最優子結構,才能通過子問題的最值得到原問題的最值。另外,雖然動態規劃的核心思想就是窮舉求最值,但是問題可以千變萬化,窮舉所有可行解其實并不是一件容易的事,只有列出正確的狀態轉移方程才能正確地窮舉。 大廠算法面試之leetcode精講3.動態規劃視頻教程(高效學習):點擊學習目錄:1.開篇介...
摘要:本文的思想源自于在上的演講。我收集這些例子的主要目的是將它們整理并清楚理解它們的原理。著主要是因為大括號也是函數定義語法的一部分。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認可。 譯者按: JavaScript有很多坑,經常一不小心就要寫bug。 原文: What the f*ck JavaScript? 譯者: Fundebug 為了保證可讀性...
摘要:本來以為是無參調用時返回了運算的幺元,后來細琢磨,好像沒有什么關系,對于運算集合上的二元運算,如果滿足,則是運算的幺元。乘法運算的幺元是,因為。但是我們定義函數或者函數,如果不傳遞參數時,返回幺元的話也是不合理的。 昨天心血來潮寫了一篇文章:為什么Math.min() 比 Math.max() 大? 為什么很多人會有這種疑惑,是因為犯了想當然的錯誤——望文生義。Math.min() 作...
摘要:考慮如下代碼按照常規思路,這段代碼應該輸出,畢竟最小值應該小于最大值。為什么會這樣呢還得去查查的相關文檔。是什么呢是中全局對象的一個屬性,在瀏覽器環境中就是對象的一個屬性,表示無窮大。繼續閱讀為什么比大續 考慮如下代碼: var min = Math.min(); var max = Math.max(); console.log(min < max); 按照常規思路,這段代碼應該輸出...
摘要:然而,不會在年的基礎上加,而只是表示年。閉包這是一個經典的面試題雖然期望輸出,然而實際上卻不會。因為第行的沒有在正確的環境下執行。 譯者按: 漫漫編程路,總有一些坑讓你淚流滿面。 原文: Who said javascript was easy ? 譯者: Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。 這里我們針對JavaScri...
閱讀 976·2022-06-21 15:13
閱讀 1858·2021-10-20 13:48
閱讀 1046·2021-09-22 15:47
閱讀 1378·2019-08-30 15:55
閱讀 3134·2019-08-30 15:53
閱讀 528·2019-08-29 12:33
閱讀 725·2019-08-28 18:15
閱讀 3472·2019-08-26 13:58