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 ?
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]';
}
[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