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