472 votes

Quel est le meilleur à utiliser : typeof ou instanceof ?

Dans mon cas particulier :

ou

est-il encore important, quelle est la différence ?

Ressources supplémentaires :

JavaScript-jardin typeof vs instanceof

635voto

Szymon Wygnański Points 2238
<h3>Utilisation <code></code> pour les types personnalisés :<pre><code></code></pre><h3>Utilisation <code></code> pour simple construit en types :</h3><pre><code></code></pre><h3>Utilisation <code></code> pour complexe construit dans les types :</h3><pre><code></code></pre><p>Et le dernier est un petit peu astuces :</p><pre><code></code></pre></h3>

121voto

Soviut Points 26384

Les deux sont des fonctionnalités similaires, car ils ont tous deux retournent des informations de type, mais personnellement, je préfère `` parce qu’il compare les types réels plutôt que des chaînes. Type de comparaison est moins sujette à l’erreur humaine, et il est techniquement plus rapide puisqu’il compare des pointeurs dans la mémoire, plutôt que de faire des comparaisons de chaînes entières.

106voto

Kenneth J Points 1754

Une bonne raison d’utiliser typeof est si la variable peut être indéfinie.

Une bonne raison d’utiliser instanceof est si la variable peut être nulle.

Alors, vraiment à mon avis cela dépend quel type de données possibles que vous contrôlez.

17voto

sidewaysmilk Points 1872

J'ai découvert que certains de vraiment intéressant (lire aussi "horrible") le comportement de Safari 5 et Internet Explorer 9. J'ai été en utilisant ce avec beaucoup de succès dans Chrome et Firefox.

if (typeof this === 'string') {
    doStuffWith(this);
}

Puis-je tester dans IE9, et il ne fonctionne pas du tout. Grosse surprise. Mais dans Safari, il est intermittent! J'ai donc démarrer le débogage, et je trouve que Internet Explorer est toujours le retour false. Mais le plus étrange, c'est que Safari semble être de faire une sorte d'optimisation dans ses VM JavaScript où il est true la première fois, mais false chaque fois que vous appuyez sur recharger!

Mon cerveau presque explosé.

Alors maintenant, j'ai installé sur ce:

if (this instanceof String || typeof this === 'string')
    doStuffWith(this.toString());
}

Et maintenant, tout fonctionne très bien. Notez que vous pouvez appeler "a string".toString() et elle retourne une copie de la chaîne, c'est à dire

"a string".toString() === new String("a string").toString(); // true

Donc, je vais utiliser les deux à partir de maintenant.

8voto

newacct Points 42530

fonctionne également quand est un sous-type de `` , je pense

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X