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?
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".
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