Je travaille avec node.js, donc cela pourrait être spécifique à V8.
J'ai toujours remarqué une certaine bizarrerie avec des différences entre typeof et instanceof, mais en voici une qui me dérange vraiment:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
Que se passe-t-il ici?
typeof
est une construction qui "renvoie" le type primitif de tout ce que vous lui transmettez.instanceof
teste pour voir si l'opérande de droite apparaît n'importe où dans la chaîne prototype de la gauche.
Il est important de noter qu'il existe une énorme différence entre le littéral de chaîne "abc"
Et l'objet chaîne new String("abc")
. Dans ce dernier cas, typeof
renverra "objet" au lieu de "chaîne".
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