Prüfen, ob eine Variable vom Typ Funktion ist

Angenommen, ich habe eine Variable, die wie folgt definiert ist:

var a = function() {/* Statements */};

Ich möchte eine Funktion, die prüft, ob der Typ der Variablen funktionsähnlich ist, d.h. :

function foo(v) {if (v is function type?) {/* do something */}};
foo(a);

Wie kann ich prüfen, ob die Variable a vom Typ Funktion ist, wie oben definiert?

if (typeof v === "function") {
    // do something
}
Kommentare (6)
Lösung

Sicherlich ist der Weg von underscore effizienter, aber der beste Weg zur Überprüfung, wenn Effizienz kein Thema ist, ist auf der von @Paul Rosania verlinkten Seite von underscore beschrieben.

Inspiriert von underscore ist die endgültige isFunction-Funktion wie folgt:

function isFunction(functionToCheck) {
 return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
Kommentare (11)

Underscore.js verwendet einen aufwändigeren, aber sehr leistungsfähigen Test:

_.isFunction = function(obj) {
  return !!(obj && obj.constructor && obj.call && obj.apply);
};

Siehe: http://jsperf.com/alternative-isfunction-implementations

EDIT: aktualisierte Tests deuten darauf hin, dass typeof schneller sein könnte, siehe http://jsperf.com/alternative-isfunction-implementations/4

Kommentare (6)