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

从一道问题提及,下面这个比较的效果是true照样false

javascriptMath.max() > Math.min();

在浏览器里测试很快会得知它的效果是false,这跟直观的明白可不一样,max怎样不比min大呢?
这就要从Mathmaxmin要领提及了。

Mathmax要领和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.maxMath.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()同理。

    原文作者:oslh
    原文地址: https://segmentfault.com/a/1190000002968442
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞