千家信息网

javascript中为什么Math.min()比Math.max()大

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关javascript中为什么Math.min()比Math.max()大的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么很多人会有这种疑惑,是
千家信息网最后更新 2026年11月03日javascript中为什么Math.min()比Math.max()大

这篇文章给大家分享的是有关javascript中为什么Math.min()比Math.max()大的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

为什么很多人会有这种疑惑,是因为犯了想当然的错误--望文生义。Math.min() 作为一个函数,返回的并不是最小值;同理 Math.max() 返回的也不是最大值。他们返回的是参数的最大值和最小值,而我们却没有传递任何参数。

javascript 中数值的最大值和最小值常量分别是 Number.MAX_VALUE 和 Number.MIN_VALUE,在我电脑 V8 的运行结果是 1.7976931348623157e+308 和 5e-324。

这里也有一个坑,那就是 MIN_VALUE 并不是最小的数,而是绝对值最小的数,它是一个正数。而 Math.min() 的返回值比 Number.MAX_VALUE 还要大。

Math.min() 返回了 Infinity,这个值对应了 Number.POSITIVE_INFINITY 常量。Math.max() 返回了 -Infinity,这个值对应了 Number.NEGATIVE_INFINITY 常量。

就像数学里面那样,正无穷和负无穷并不是确切的数,只是集合里面的概念。我们可以使用 0 减去正无穷来得到负无穷:0 - Infinity = -Infinity,或者通过 0 减去负无穷来得到正无穷:0 - (-Infinity) = Infinity。但是我们把正无穷和负无穷相加却得不到 0,事实上我们得到的是 NaN。

当我们真正明白了 Math.min 和 Math.max 只是返回了所有参数的最大值,就很容易理解这个看似匪夷所思的结果了。

本来想查看 V8 的源码,但是搜索了一圈,也只找到了几个测试用例(文件: test/mjsunit/math-min-max.js):

assertEquals(Infinity, Math.min());

assertEquals(1, Math.min(1));

assertEquals(1, Math.min(1, 2));

assertEquals(1, Math.min(2, 1));

assertEquals(1, Math.min(1, 2, 3));

assertEquals(1, Math.min(3, 2, 1));

assertEquals(1, Math.min(2, 3, 1));

从此测试用例中可以看出,Math.min() 确实返回了 Infinity。继续阅读此测试用例还会发现更有意思的事:

assertEquals(-Infinity, Infinity / Math.min(-0, +0));

assertEquals(-Infinity, Infinity / Math.min(+0, -0));

assertEquals(-Infinity, Infinity / Math.min(+0, -0, 1));

对比下面的结果:

assertEquals(Infinity, Infinity / Math.max(-0, +0));

assertEquals(Infinity, Infinity / Math.max(+0, -0));

assertEquals(Infinity, Infinity / Math.max(+0, -0, -1));

也就是说在 Math.min 和 Math.max 进行数值比较(javascript不分整型和浮点型)时,负零是小于正零的。

-0、+0、-Infinity、+Infinity、NaN 这几个概念就可以讲上一天一夜了,篇幅有限就不展开讲了,以后有时间再填坑。

言归正传,现在我们换个思路,试着从算法的角度去考虑最大值和最小值的问题。

我们如何求 N 个参数的最大值呢?为了描述简单我们使用数组(感谢 @f2er前端百科)

var max = ___;

arr.forEach(function(n) {

if(n > max) {

max = n;

}

});

如果是填空题,你会在空格处填什么呢?如此想来,这个返回值就很合理了。

本来以为是无参调用时返回了运算的幺元,后来细琢磨,好像没有什么关系,2333

对于运算集合 S 上的二元运算*,如果满足 a*x = x*a = x,则 a 是*运算的幺元。加法运算的幺元是 0,因为 0+x = x+0 = x。乘法运算的幺元是 1,因为 1*x = x*1 = x。但是我们定义函数 add() 或者 mult() 函数,如果不传递参数时,返回幺元的话也是不合理的。

感谢各位的阅读!关于"javascript中为什么Math.min()比Math.max()大"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

最大 最小 最大值 运算 参数 函数 常量 结果 测试 内容 只是 数值 更多 概念 篇文章 面的 不合理 不错 匪夷所思 望文生义 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 互联网科技战争 互联网科技革命 奇酷互联网络科技公司 互联网高科技企业 上海卓越科技 互联网 中国最先进互联网科技公司 科技与互联网哪个更好 互联网校园科技培训 来此购互联网科技有限公司 科技类公司包括互联网吗 佛山市拉法互联网科技有限公司 世界互联网领先科技成果获奖 群盈汇互联网科技有限公司 科技互联网的核心竞争力 伍佰万互联网科技怎么赚钱 杭州披云加互联网科技有限公司 世界互联网科技成果奖 互联网科技机房 上海互联网科技园景观 华服互联网科技靠谱吗 互联网最新的科技有限公司 重庆互联网络科技 科技互联网创业计划书 镁科技互联网资讯平台 互联网和高科技公司 玖二柒互联网科技公司待遇 须眉科技是互联网公司吗 伍佰万互联网科技怎么赚钱 山东亿川互联网科技有限责任公司
0