首页 > 解决方案 > 为什么这段代码必须使用 Math.min.apply 而不仅仅是 Math.min

问题描述

我正在阅读这篇文章中的以下缩写代码,它在日期列表中获取“最小”日期:

var dates=[];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
var minDate=new Date(Math.min.apply(null,dates));

有人能解释为什么我们需要在这里使用.apply吗?

我知道它.apply用于执行具有提供this值的函数,但我不明白为什么代码需要min调用该函数this=null以及为什么替换时代码不起作用 Math.min.apply(null, dates)Math.min(dates)

标签: javascriptarraysjavascript-objects

解决方案


这是因为该Function.prototype.apply()方法有两个参数。第一个是新分配的this值,第二个是将传递给被调用函数的参数数组。

您的示例对第一个参数没有做任何特别的事情,但对第二个参数却有。

Math.min()接受无限数量的参数。您的示例将日期数组作为参数传递,并将数组中的项目作为参数传播。现在你可以用扩展语法做这样的事情。

var minDate = new Date(Math.min(...dates));

推荐阅读