350 Stimmen

Wie man feststellt, ob eine JavaScript-Funktion definiert ist

Woran erkennt man, ob eine Funktion in JavaScript definiert ist?

Ich möchte etwas in der Art machen

function something_cool(text, callback) {
    alert(text);
    if( callback != null ) callback();
}

Aber es verschafft mir einen

Callback ist keine Funktion

Fehler, wenn Callback nicht definiert ist.

555voto

Tom Ritter Punkte 97450
typeof callback === "function"

252voto

Jason Bunting Punkte 56534

Alle aktuellen Antworten verwenden einen literalen String, den ich nach Möglichkeit nicht in meinem Code haben möchte - dies ist nicht der Fall (und bietet zudem eine wertvolle semantische Bedeutung):

function isFunction(possibleFunction) {
  return typeof(possibleFunction) === typeof(Function);
}

Ich persönlich versuche, die Anzahl der Strings in meinem Code zu reduzieren...


Auch wenn ich mir bewusst bin, dass typeof ein Operator und keine Funktion ist, kann es nicht schaden, eine Syntax zu verwenden, die ihn als letzteren erscheinen lässt.

20voto

if (callback && typeof(callback) == "function")

Beachten Sie, dass callback (an sich) den Wert false wenn es sich undefined , null , 0 o false . Im Vergleich zu null ist übermäßig spezifisch.

11voto

Darren G Punkte 631

Verwendung von optionale Verkettung mit Funktionsaufrufen könnten Sie Folgendes tun:

function something_cool(text, callback) {
    alert(text);
    callback?.();
}

Si callback eine Funktion ist, wird sie ausgeführt.

Si callback es null o undefined wird kein Fehler ausgelöst und nichts geschieht.

Wenn jedoch callback etwas anderes ist, z. B. eine Zeichenkette oder eine Zahl, wird trotzdem ein TypeError ausgelöst.

10voto

patriciorocca Punkte 127

Diese Methoden, um festzustellen, ob eine Funktion implementiert ist, schlagen auch fehl, wenn die Variable nicht definiert ist, so dass wir etwas Mächtigeres verwenden, das den Empfang eines Strings unterstützt:

function isFunctionDefined(functionName) {
    if(eval("typeof(" + functionName + ") == typeof(Function)")) {
        return true;
    }
}

if (isFunctionDefined('myFunction')) {
    myFunction(foo);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X