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