Comment dites-vous si une fonction en JavaScript est définie?
Je veux faire quelque chose comme ça
function something_cool(text, callback) { alert(text); if( callback != null ) callback(); }
Mais il me fait un
Le rappel n'est pas une fonction
Erreur lorsque le rappel n'est pas défini.
typeof callback === "function"
Toutes les réponses actuelles utilisent une chaîne littérale, ce que je préfère ne pas avoir dans mon code, si possible – ce n'est pas (et fournit un sens sémantique précieux pour lancer):
function isFunction(possibleFunction) { return typeof(possibleFunction) === typeof(Function); }
Personnellement, j'essaie de réduire le nombre de chaînes suspendues dans mon code …
En outre, alors que je sais que typeof
est un opérateur et non une fonction, il y a peu de mal à utiliser la syntaxe qui fait apparaître cette dernière.
if (callback && typeof(callback) == "function")
Notez que le rappel (par lui-même) évalue à false
s'il est undefined
, null
, 0
ou false
. Comparer à null
est trop spécifique.
Nouveau sur JavaScript Je ne sais pas si le comportement a changé, mais la solution donnée par Jason Bunting (il y a 6 ans) ne fonctionnera pas si possible. La fonction n'est pas définie.
function isFunction(possibleFunction) { return (typeof(possibleFunction) == typeof(Function)); }
Cela jettera un ReferenceError: possibleFunction is not defined
erreur ReferenceError: possibleFunction is not defined
car le moteur essaie de résoudre le symbole possibleFunction (comme mentionné dans les commentaires à la réponse de Jason)
Pour éviter ce comportement, vous ne pouvez passer le nom de la fonction que vous souhaitez vérifier si elle existe. Alors
var possibleFunction = possibleFunction || {}; if (!isFunction(possibleFunction)) return false;
Cela définit une variable comme étant la fonction que vous voulez vérifier ou l'objet vide si elle n'est pas définie et évite ainsi les problèmes mentionnés ci-dessus.
essayer
if (typeof(callback) == 'function')
Ces méthodes pour indiquer si une fonction est implémentée échouent également si la variable n'est pas définie, donc nous utilisons quelque chose de plus puissant qui prend en charge la réception d'une chaîne:
function isFunctionDefined(functionName) { if(eval("typeof(" + functionName + ") == typeof(Function)")) { return true; } } if (isFunctionDefined('myFunction')) { myFunction(foo); }
function something_cool(text, callback){ alert(text); if(typeof(callback)=='function'){ callback(); }; }
if ('function' === typeof callback) ...
Essaye ça:
callback instanceof Function
typeof(callback) == "function"
essayer:
if (!(typeof(callback)=='undefined')) {...}
Si vous regardez la source de la bibliothèque @Venkat Sudheer Reddy Aedama mentionnée, underscorejs, vous pouvez voir ceci:
_.isFunction = function(obj) { return typeof obj == 'function' || false; };
C'est juste ma réponse CONSEIL, CONSEIL:>
je pourrais faire
try{ callback(); catch(e){};
Je sais qu'il y a une réponse acceptée, mais personne ne l'a suggéré. Je ne suis pas vraiment sûr si cela correspond à la description idiomatique, mais ça marche pour tous les cas.
Dans les nouveaux moteurs js, on peut finally
utiliser à la place.
Je cherchais comment vérifier si une fonction jQuery était définie et je ne l'ai pas trouvé facilement.
Peut-être pourrait-il en avoir besoin;)
if(typeof jQuery.fn.datepicker !== "undefined")
Si vous utilisez http://underscorejs.org , vous avez: http://underscorejs.org/#isFunction
_.isFunction(callback);
Solution en ligne:
function something_cool(text, callback){ callback && callback(); }