Math.min.apply (0, Array) - warum?
War ich nur Graben durch einige JavaScript-code (Raphaël.js) und bin auf die folgende Zeile (übersetzt, leicht):
Math.min.apply(0, x)
wo x
ist ein array. Warum auf der Erde würden Sie dies tun? Das Verhalten scheint zu sein "nehmen die min aus dem array x
."
Kommentar zu dem Problem
Math.min.apply(this, x) nicht genauso gut wäre
InformationsquelleAutor der Frage Trevor Burnham | 2010-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erkannte ich die Antwort, wie ich war, die Veröffentlichung meiner eigenen Frage: Das ist die knappste Art und Weise die Minuten ein array
x
in JavaScript. Das erste argument ist völlig willkürlich, ich finde die 0 verwirrend, weil der code intuitiv bedeutet "Nehmen Sie die min 0 und x", die ist absolut nicht der Fall. Mit dem Math-Objekt macht mehr Sinn für menschliche Lesbarkeit, aber der Raphael.js Autoren sind besessen von Verkleinerung und 0 ist drei bytes kürzer.Sehen http://ejohn.org/blog/fast-javascript-maxmin/
Zur besseren Lesbarkeit Willen, ich würde empfehlen die Menschen aufhören, dies zu tun und stattdessen eine Funktion definieren, die entlang der Linien von
InformationsquelleAutor der Antwort Trevor Burnham
Der Grund dafür ist:
Ihre Eingabe
x
ist ein arrayDie Signatur von
Math.min()
nicht nehmen, arrays, nur durch Komma getrennte ArgumenteWenn Sie wurden mit
Function.prototype.call()
hätte es fast die gleiche Signatur, nur das erste argument ist diethis
Zusammenhang d.h. wer seine "Berufung"Math.min.call(context, num1, num2, num3)
Den
context
nur von Bedeutung, wenn Sie beziehen sich aufthis
innerhalb der Funktion z.B. die meisten Methoden, die Sie aufrufen können auf ein array:Array.prototype.<method>
finden würde, umthis
(das array auf der linken Seite der 'Punkt') innerhalb der Methode.Function.prototype.apply()
ist sehr ähnlich zu.call()
, nur, dass statt Kommata getrennte Argumente, es nimmt jetzt ein array nach dercontext
.Function.prototype.call(context, arg1, arg2, arg3)
Function.prototype.apply(context, [arg1, arg2, arg3])
Den
0
odernull
, die Sie in das wie das erste argument ist nur ein Schalthebel.InformationsquelleAutor der Antwort David Rosson
Den richtigen und weniger verwirrende Weise zu nennen:
Math.min.apply(null, array)
Wenn parameter wird nicht verwendet wenn er auf null macht den code besser lesbar, als wenn er auf 0 oder Mathematik
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
InformationsquelleAutor der Antwort Igor Vaschuk
Hier ist ein Beispiel, wo wir bekommen können die MAX-und MIN-Zeitzone offsets für das jeweilige Jahr für eine Zeitzone. Es gibt zwei änderungen für das Jahr Rechnung für das DST und ST. (d.h. ST = 300 ein DST = 360 für die Zeitzone in Frage).
InformationsquelleAutor der Antwort Mike Q