我刚刚在 JavaScript 代码(Raphaël.js)中找到了以下行(略有改动翻译):
Math.min.apply(0, x)
其中x
是一个数组。你为什么要这样做呢?这种行为似乎是“从数组x
中取最小值”。
我刚刚在 JavaScript 代码(Raphaël.js)中找到了以下行(略有改动翻译):
Math.min.apply(0, x)
其中x
是一个数组。你为什么要这样做呢?这种行为似乎是“从数组x
中取最小值”。
我在发布自己的问题时意识到答案:这是JavaScript中获取数组 x
最小值最简洁的方法。第一个参数完全是任意的;我认为 0 会让人感到困惑,因为代码直观地表示“取 0 和 x 中的最小值”,这绝对不是真的。使用 Math 对象更有人类可读性,但 Raphael.js 的作者痴迷于代码缩小,0 比较短(只有三个字节)。
请参阅http://ejohn.org/blog/fast-javascript-maxmin/
出于可读性方面的考虑,我强烈建议人们停止这样做,而是定义一个类似以下结构的函数:
function arrayMin(arr) { return Math.min.apply(Math, arr); };
原因是这样的:
您的输入x
是一个数组
Math.min()
的签名不接受数组,只接受逗号分隔的参数。
如果您使用了Function.prototype.call()
,它几乎具有相同的签名,只是第一个参数是this
上下文,即谁在“调用”。
Math.min.call(context, num1, num2, num3)
context
仅在函数内部引用this
时才有影响,例如:您可以在数组上调用的大多数方法:Array.prototype.<method>
会在方法内部引用this
(点左侧的数组)。
Function.prototype.apply()
与call()
非常相似,只是它现在在context
之后需要一个数组,而不是以逗号分隔的参数。
Function.prototype.call(context, arg1, arg2, arg3)
Function.prototype.apply(context, [arg1, arg2, arg3])
您放置的作为第一个参数的0
或null
只是一个占位符。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
var arr = [];
for (var i = 0; i < 365; i++) {
var d = new Date();
d.setDate(i);
var newoffset = d.getTimezoneOffset();
arr.push(newoffset);
}
var DST = Math.min.apply(null, arr);
var nonDST = Math.max.apply(null, arr);
tw.local.stInt = DST
tw.local.edInt = nonDST
Math.min(...x)
。 - JonasV