我只是在挖掘一些 JavaScript 代码 (Raphaël.js) 并遇到了以下行(略微翻译):
Math.min.apply(0, x)
其中 x
是一个数组。你到底为什么要这样做?行为似乎是“从数组中取最小值 x
”。
原文由 Trevor Burnham 发布,翻译遵循 CC BY-SA 4.0 许可协议
我只是在挖掘一些 JavaScript 代码 (Raphaël.js) 并遇到了以下行(略微翻译):
Math.min.apply(0, x)
其中 x
是一个数组。你到底为什么要这样做?行为似乎是“从数组中取最小值 x
”。
原文由 Trevor Burnham 发布,翻译遵循 CC BY-SA 4.0 许可协议
原因是这样的:
您的输入 x
是一个数组
Math.min()
的签名不接受数组,只接受逗号分隔的参数
如果您使用的是 Function.prototype.call()
它将具有几乎相同的签名,除了第一个参数是 this
上下文, 即 谁在“呼叫”
Math.min.call(context, num1, num2, num3)
The context
only matters when you refer to this
inside the function, eg most methods you can call on an array: Array.prototype.<method>
would refer to this
(“点”左侧的数组)在方法内。
Function.prototype.apply()
与 .call()
非常相似,只是它不再采用逗号分隔的参数,而是在 context
之后采用一个数组
Function.prototype.call(context, arg1, arg2, arg3)
Function.prototype.apply(context, [arg1, arg2, arg3])
您作为第一个参数输入的 0
或 null
只是一个位置移位器。
原文由 David Rosson 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
我在发布自己的问题时意识到了答案:这 是 在 JavaScript 中获取数组最小值的最简洁方法
x
。第一个论点完全是任意的;我发现 0 令人困惑,因为代码直觉上意味着“取 0 和 x 的最小值”,但事实并非如此。使用 Math 对象对人类可读性更有意义,但 Raphael.js 作者痴迷于缩小,0 比三个字节短。请参阅 http://ejohn.org/blog/fast-javascript-maxmin/
为了可读性,我强烈建议人们停止这样做,而是按照以下方式定义一个函数