2016-05-25 12 views
7

Ich würde gerne schreiben array.some(Boolean) als eine Möglichkeit zu testen, ob Elemente in array truthy sind.JavaScript: Kann das boolesche Objekt als Callback-Funktion verwendet werden?

Gibt es Probleme mit der Verwendung des Objekts auf diese Weise? Hat es in modernen Browsern dasselbe Verhalten? Entspricht es immer array.some(function(elem) { return !!elem; })?

+1

Soweit ich diese Funktion kennen, die einen beliebigen Wert Boolean wirft. Jede Funktion ist auch ein Objekt, also sollte Boolean ein Objekt sein, sollte kein Problem sein. – sielakos

+0

Natürlich könnte jemand mit einem guten Sinn für Humor die 'Boolean' Funktion mit, sagen wir,' Boolean = function() {return true; }; '. Außerdem sollte es keine Kontraindikationen geben. –

Antwort

7

Gibt es irgendwelche Probleme mit der Verwendung des Objekts auf diese Weise?

Nr Anders als parseInt zum Beispiel (das wäre problematisch), Boolean erwartet nur ein einziges Argument. Es sollte also keine Probleme geben, die anderen Callback-Argumente (index und das Array) zu übergeben, sie werden einfach ignoriert.

Hat es das gleiche Verhalten in modernen Browsern?

Ich hoffe es. Wenn Sie der Funktion nicht vertrauen können, was bleibt übrig?

Ist es immer äquivalent zu array.some(function(elem) { return !!elem; })?

Ja. Vom spec:

Wenn Boolean als Funktion aufgerufen wird und nicht als ein Konstruktor, führt es eine Typumwandlung.

Und das ist im Wesentlichen was !! auch tut.


Relevante Referenzen aus der spec:

Verwandte Themen