Vérifier si une variable est de type fonction

Supposons que j'ai une variable quelconque, qui est définie comme suit :

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

Je veux une fonction qui vérifie si le type de la variable est de type fonction. c'est-à-dire :

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

Comment puis-je vérifier si la variable a est de type Fonction de la manière définie ci-dessus ?

if (typeof v === "function") {
    // do something
}
Commentaires (6)
Solution

Bien sûr, la méthode d'underscore est plus efficace, mais la meilleure façon de vérifier, lorsque l'efficacité n'est pas un problème, est décrite sur la page d'underscore dont le lien est fourni par @Paul Rosania.

Inspirée par underscore, la fonction isFunction finale est la suivante :

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

[Underscore.js] (http://underscorejs.org/) utilise un test plus élaboré mais très performant :

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

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

EDIT : des tests mis à jour suggèrent que typeof pourrait être plus rapide, voir : http://jsperf.com/alternative-isfunction-implementations/4

Commentaires (6)