首页 编程 软件学院 查看内容

为什么Math.max()>Math.min()的结果是false

2015-7-8 11:41 1471 0

摘要: 从一道题目说起,下面这个比较的结果是true还是false?javascriptMath.max() Math.min(); 在浏览器里测试很快会得知它的结果是false,这跟直观的理解可不一样,max怎么不比min大呢?这就要从Math的max和min方法说起 ...
关键词: nbsp Math max 参数 Infinity 一个 结果 javascriptMath min 方法

从一道题目说起,下面这个比较的结果是 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 禁用词语ing 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() 同理。

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部