Cela dépend sur le fonctionnement interne de jQuery, mais je partirais avec
obj instanceof jQuery
Il est le plus 'mode JavaScript' de le faire. Gardez à l'esprit qu'il échouera lors du passage d'objets entre les limites de fenêtre/cadre!
suggestion de Tomalak
'jquery' in obj
devrait fonctionner dans ce cas, vous devez donc utiliser si vous attendez d'échange de données multi-fenêtre. Je ne le recommanderais pas comme une solution générale, car la recherche d'une propriété nommée 'jquery'
n'est pas très fiable.
L'opérateur in
lancera également une erreur si obj
est une primitive. Si ce comportement est indésirable, vous pouvez envisager d'utiliser un de ces tests au lieu:
obj && obj.jquery
'jquery' in Object(obj)
je trouve la deuxième plus attrayante, mais le premier sera probablement plus rapide.
Vérification
Object(obj).hasOwnProperty('jquery')
échouera, comme des objets jQuery héritent que la propriété de leur prototype.
Je voudrais aussi décourager l'utilisation de la propriété constructor
pour la vérification de type JavaScript - il peut fonctionner de manière fiable pour jQuery, mais comme constructor
est juste une propriété de l'objet pointé par prototype
la propriété de la fonction constructeur au moment de l'instanciation, il y a beaucoup de façons de jouer avec de tels tests ...
Comme une note de côté:
jQuery vérifie lui-même pour obj && obj.jquery
. Il n'utilise pas instanceof
même une fois. Au lieu de cela, il utilise une combinaison de typeof
, Duck-Typing et toString.call()
pour la vérification de type, qui devrait fonctionner où instanceof
échouera.
En outre, hasOwnProperty()
n'est jamais utilisé aussi bien. Je ne suis pas sûr de ce que cela dit à propos de la qualité du code de la bibliothèque jQuery;)
Beaucoup plus détaillé que mon message: +1 et je recommande que votre message soit choisi comme réponse – VonC
Vous avez eu mon vote pour mentionner l'échec de instanceof à travers les limites de fenêtre/cadre! –
Alors, lequel est le meilleur? – Kato