Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中,与无穷大的比较如何找到最大的数字?_Javascript - Fatal编程技术网

Javascript 在JS中,与无穷大的比较如何找到最大的数字?

Javascript 在JS中,与无穷大的比较如何找到最大的数字?,javascript,Javascript,请原谅我的困惑。。。我正在浏览W3SchoolofJS的全部内容,作为一个快速参考,以了解所有的JS 我遇到了这段代码,虽然我理解它的机制,但我不理解它是如何工作的,也就是说,找到了最大的数字 如果您能帮助我们通过对比负无穷大找到最大数,我们将不胜感激 代码:() 找到最大的数字 函数findMax(){ var i; var max=-无穷大; 对于(i=0;imax){ max=参数[i]; } } 返回最大值; } document.getElementById(“demo”).in

请原谅我的困惑。。。我正在浏览W3SchoolofJS的全部内容,作为一个快速参考,以了解所有的JS

我遇到了这段代码,虽然我理解它的机制,但我不理解它是如何工作的,也就是说,找到了最大的数字

如果您能帮助我们通过对比负无穷大找到最大数,我们将不胜感激

代码:()


找到最大的数字

函数findMax(){ var i; var max=-无穷大; 对于(i=0;imax){ max=参数[i]; } } 返回最大值; } document.getElementById(“demo”).innerHTML=findMax(4,5,6);
函数findMax(){
console.log(参数)
var i;
var max=-无穷大;
对于(i=0;imax){
max=参数[i];
}
控制台日志(i,最大值);
}
返回最大值;
}
log(findMax(1,2,3,4))
如果您能帮助我们通过对比负无穷大找到最大数,我们将不胜感激

代码并不总是与负
无穷大进行比较:

var max = -Infinity;
但是,它只是将
max
变量初始化为
-Infinity
,这样就保证了当我们循环数组值时,不会有任何小于它的值

分析:

例如,当我们调用
findMax(4,5,6)
时,我们将有三次迭代:

  • 在第一次迭代中,
    if(参数[0]>max)
    4>-Infinity
    true
    so
    max=4
  • 在第二次迭代中,
    if(参数[1]>max)
    5>4
    true
    so
    max=5
  • 在第三次迭代中,
    if(参数[2]>max)
    6>5
    true
    so
    max=6
  • 结论:


    因此,您可以在这里看到,
    max
    值将始终使用
    数组中的第一个元素更新,因为任何传递的数字都将大于
    -无穷大
    ,即使我们传递了像
    -1240000
    这样的负值,
    -999999
    或-102457933210
    它们将始终高于
    -Infinity`。

    -Infinity
    的中性元素。示例使用
    -Infinity
    作为开始比较的绝对最小数。例如,如果你传递的都是负数,它们都是相对较大的负数,那么你的max函数就可以工作了

    e、 g.
    findMax(-123456,-123459,-1234832383483)


    在本例中,它是一个很好的初始值,而不是像零这样的值。在这种情况下,findMax的结果是零,因为前面示例中的所有数字都小于零。

    当您尝试确定如何执行此操作时,答案会变得很清楚。下面是另一个备选解决方案:

    function findMax() {
        var i;
        var max = arguments[0];
        for (i = 1; i < arguments.length; i++) {
            if (arguments[i] > max) {
                max = arguments[i];
            }
        }
        return max;
    } 
    
    即使只提供一个值,它也可以工作:

    findMax(42); //=> 42
    
    你能看到它失败的地方吗?这种实现存在严重问题


    你找到了吗

    findMax(); //=> undefined
    
    当您不传递任何参数时,将得到
    未定义的
    ,这是一个非数值结果

    对于另一个版本,它将返回
    -Infinity
    。这个答案是数字型的;所以函数总是返回一个数字。具有一致的返回类型使得使用系统编程更加容易

    如果您真的想更深入地理解基本思想,请想象一个
    concatenateAllStrings
    函数。你可以用同样的方法,将遇到的每一个新字符串添加到你的最终值中。但是你需要从一些事情开始。只有一个合理的选择:空字符串。这是因为对于任何字符串
    s
    '+s/=>s
    。在本例中,您希望值
    x
    ,以便对于任何数字
    n
    n>=x
    。什么比每个数字都少?真的只有无限

    为了更深入地了解,您可以研究“半群上的折叠”


    实际上,我在采访JS开发人员时使用了一个相关的事实。只有当用户证明自己有能力胜任工作时,才能这样做。我这样问:

    这听起来有点像一个技巧性的问题,但目标是看看您可能如何理解现有的系统。Javascript的一个奇怪特性是
    Math.max()
    。您能否讨论一下如何实现
    max
    min


    然后我引导她通过它,提供尽可能多的提示,直到她解释了它的全部。没有人能马上知道答案。候选人需要多少指导,以及她对解释的理解程度,有助于我确定她有什么有用的地方。

    不确定你说“理解它的机制”但“不理解它是如何工作的”是什么意思。那些人觉得他们是一样的
    Infinity
    在这里只是一个方便的关键字,它也可以从-9999999或其他什么开始-算法只是“从一个设置为非常低的数字的跟踪器开始,每次你看到一个更大的数字,更新跟踪器为新的数字,因为它是迄今为止你看到的最高数字”如果数组的第一个元素存在,@FelixKling(如果它存在的话)@lilezek(我不想在我的评论中透露太多),你会用哪个值初始化
    max
    s1 = max of e1,-∞
    s2 = max of s1,e2
    s3 = max of s2,e3
    ...
    
    function findMax() {
        var i;
        var max = arguments[0];
        for (i = 1; i < arguments.length; i++) {
            if (arguments[i] > max) {
                max = arguments[i];
            }
        }
        return max;
    } 
    
    findMax(8, 6, 7, 5, 3, 0, 9, 8, 6, 7, 5); //=> 9
    
    findMax(42); //=> 42
    
    findMax(); //=> undefined