摘要:的方法和方法分别用于求一系列参数中的最大和最小值,如果传入的参数不是数字类型,会对该参数利用方法进行类型转换。
从一道题目说起,下面这个比较的结果是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 fucking 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()同理。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85811.html
摘要:动态规划问题一定会具备最优子结构,才能通过子问题的最值得到原问题的最值。另外,虽然动态规划的核心思想就是穷举求最值,但是问题可以千变万化,穷举所有可行解其实并不是一件容易的事,只有列出正确的状态转移方程才能正确地穷举。 大厂算法面试之leetcode精讲3.动态规划视频教程(高效学习):点击学习目录:1.开篇介...
摘要:本文的思想源自于在上的演讲。我收集这些例子的主要目的是将它们整理并清楚理解它们的原理。着主要是因为大括号也是函数定义语法的一部分。自从年双十一正式上线,累计处理了亿错误事件,得到了金山软件等众多知名用户的认可。 译者按: JavaScript有很多坑,经常一不小心就要写bug。 原文: What the f*ck JavaScript? 译者: Fundebug 为了保证可读性...
摘要:本来以为是无参调用时返回了运算的幺元,后来细琢磨,好像没有什么关系,对于运算集合上的二元运算,如果满足,则是运算的幺元。乘法运算的幺元是,因为。但是我们定义函数或者函数,如果不传递参数时,返回幺元的话也是不合理的。 昨天心血来潮写了一篇文章:为什么Math.min() 比 Math.max() 大? 为什么很多人会有这种疑惑,是因为犯了想当然的错误——望文生义。Math.min() 作...
摘要:考虑如下代码按照常规思路,这段代码应该输出,毕竟最小值应该小于最大值。为什么会这样呢还得去查查的相关文档。是什么呢是中全局对象的一个属性,在浏览器环境中就是对象的一个属性,表示无穷大。继续阅读为什么比大续 考虑如下代码: var min = Math.min(); var max = Math.max(); console.log(min < max); 按照常规思路,这段代码应该输出...
摘要:然而,不会在年的基础上加,而只是表示年。闭包这是一个经典的面试题虽然期望输出,然而实际上却不会。因为第行的没有在正确的环境下执行。 译者按: 漫漫编程路,总有一些坑让你泪流满面。 原文: Who said javascript was easy ? 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 这里我们针对JavaScri...
阅读 957·2022-06-21 15:13
阅读 1847·2021-10-20 13:48
阅读 1027·2021-09-22 15:47
阅读 1364·2019-08-30 15:55
阅读 3112·2019-08-30 15:53
阅读 519·2019-08-29 12:33
阅读 711·2019-08-28 18:15
阅读 3458·2019-08-26 13:58