web-dev-qa-db-fra.com

Différences entre typeof et instanceof en JavaScript

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?

27
Eric

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

40
Niet the Dark Absol

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
8
Guffa