Différences entre typeof et instanceof en JavaScript [dupliquer]

cette question a déjà une réponse ici:

je travaille avec node.js, donc ça pourrait être spécifique à V8.

j'ai toujours remarqué des bizarreries avec des différences entre typeof et instanceof, mais en voici un qui vraiment me chiffonne:

var foo = 'foo';
console.log(typeof foo);

Output: "string"

console.log(foo instanceof String);

Output: false

que se passe-t-il?

26
demandé sur Eric 2013-02-12 22:51:53

2 réponses

typeof est une construction qui" retourne " le type primitif de tout ce que vous le Passez.

instanceof essais pour voir si l'opérande de droite apparaît n'importe où dans la chaîne prototype de gauche.

il est important de noter qu'il y a une énorme différence entre la chaîne littérale "abc" et l'objet string new String("abc") . Dans ce dernier cas, typeof renverra" objet "au lieu de"string".

40
répondu Niet the Dark Absol 2013-02-12 18:56:11

il y a des chaînes littérales et il y a la classe String . Ils sont séparés, mais ils fonctionnent de manière transparente, c'est-à-dire que vous pouvez toujours appliquer les méthodes String à une chaîne littérale, et cela agira comme si la chaîne littérale était une instance d'objet String .

si vous créez explicitement une instance String , c'est un objet, et c'est une instance de la classe String :

var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);

sortie:

object
true
7
répondu Guffa 2013-02-12 18:56:54