Quelle est la différence entre (typeof variable === “function”) et jQuery.isFunction()?
J'ai toujours utilisé (typeof variable === "function")
et je suis tombé sur jQuery.isFunction()
et je me demandais:
- Quelle est la différence entre la typeof méthode et de jQuery méthode? Et non seulement ce qu'est la différence, mais
- Quand est-il approprié d'utiliser la typeof méthode et quand est-il approprié d'utiliser du jQuery méthode?
Ce commentaire peut être utile api.jquery.com/jQuery.isFunction/#comment-128339529
Oui, c'est un bon commentaire. 🙂
ce commentaire était-ce?
Oui, c'est un bon commentaire. 🙂
ce commentaire était-ce?
OriginalL'auteur Aust | 2012-08-30
Vous devez vous connecter pour publier un commentaire.
Il est presque pas de différence, autre que l'utilisation de jQuery est un peu plus lent. Voir le code source:
qui appelle une fonction qui appelle une autre fonction pour déterminer la exacte même chose que ce que vous a montré 😛
Il n'y a littéralement aucun avantage à jQuery dans ce cas [ou de cette façon, 90% des cas d'utilisation de la bibliothèque]. Regarder dans Vanille-JS et découvrez quelques-unes de ses fonctionnalités 😛
TLDR: Ne pas utiliser jQuery pour cela...ou quoi que ce soit.
Mise à JOUR
Voici un test en vous montrant que Vanilla JS est à peu près 93% plus rapide que celui de jQuery: http://jsperf.com/jquery-isfunction-vs-vanilla-is-function.
Dans leur défense, il y avait eu un Chrome bug où
typeof
sur une regex serait de retour"function"
, mais avec google Chrome, mise à jour automatique de l'installer, ce bug devrait être parti depuis longtemps.existait bien avant que le bug et il existe de temps après, cependant 😛
jQuery n'est PAS la même chose que l'OP est question. jQuery finit par l'examen de
Object.prototype.toString.call()
et à la recherche d'[object Function]
qui n'est pas le même quetypeof fn === "function"
.Juste assez, j'ai réalisé qu'après leur publication et de tissage à travers le désordre complet, qui est sa base de code. Il accomplit la même fin mais dans tous les quelques rares cas de bord autant que je sache.
OriginalL'auteur Lusitanian
Il n'y a pas de différence. jQuery utilise le même concept:
Mise à jour:
Après avoir creusé plus profond, j'ai trouvé que jQuery
isFunction
méthode est de comparer lestoString
méthode de laObject.prototype
chaîne surfunction() {}
, à la chaîne[object Function]
. C'est la façon dont il diffère de votre ancien exemple et la raison pour qu'il soit plus lent quetypeof
.Eh bien, si ils échouent parfois, je pourrais tout aussi bien coller avec
typeof variable === "function"
🙂Oubliez mon commentaire (ceux que j'ai supprimé). Ils ont été de bêtises. Honnêtement, je ne sais pas si il y a des fonctions qui ne sont pas identifiés comme des fonctions de jQuery.
OriginalL'auteur 0x499602D2
Le jQuery, le code source pour isFunction est
donc
jQuery.isFunction
retourne true si et seulement si l'appel deObject.prototype.toString.call
sur son argument renvoie[object Function]
.typeof fn === "function"
. Je sais que le jQuery fonctionne mieux pour les tableaux, mais pourquoi le faire de cette façon pour une fonction si vous ne disposez pas déjà de cette bibliothèque?la performance serait une raison suffisante pour moi.
moi aussi, mais ce n'est pas dans cette réponse.
OriginalL'auteur JohnB
Habituellement, vous pouvez tester si JS objet est fonction à l'aide de ce test:
Toutefois, cela ne fonctionne pas toujours (IE8):
Avant de jQuery 1.4 en interne, ils ont utilisé la même case, mais maintenant ils l'ont corrigé. Pour être sûr que l'objet passé est une fonction qui peut être appelée, il suffit d'utiliser $.isFunction méthode:
Copié à partir de ce blog: http://nuald.blogspot.co.uk/2012/07/why-jqueryisfunction.html
OriginalL'auteur Yuan Yuan
La différence est que JQuery appelle quelque chose d'équivalent à celui-ci et vérifie la "Fonction" de la chaîne de jeton:
Alors que typof, renvoie simplement "fonction":
Voici un exemple.
OriginalL'auteur Greg Ross