从一道题目提及,下面这个比较的结果是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()
同理。