TypeError: invalid 'instanceof' operand 'x'

Message

TypeError: invalid 'instanceof' operand "x" (Firefox)
TypeError: "x" is not a function (Firefox)
TypeError: Right-hand side of 'instanceof' is not an object (Chrome)
TypeError: Right-hand side of 'instanceof' is not callable (Chrome)

Type d'erreur

Quel est le problème ?

L'opérateur instanceof attend un opérande droit qui soit un objet constructeur, c'est-à-dire un objet possédant une propriété prototype et qui puisse être appelé.

Exemples

js
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
42 instanceof 0; // TypeError: invalid 'instanceof' operand 0

function Toto() {}
var f = Toto(); // Toto() est appelé et renvoie undefined
var x = new Toto();

x instanceof f; // TypeError: invalid 'instanceof' operand f
x instanceof x; // TypeError: x is not a function

Pour corriger ces erreurs, il faut remplacer l'opérateur instanceof avec l'opérateur typeof ou s'assurer que l'opérande droit est la fonction et non le résultat de son évaluation.

js
typeof "test" == "string"; // true
typeof 42 == "number"; // true

function Toto() {}
var f = Toto; // On n'appelle pas Toto.
var x = new Toto();

x instanceof f; // true
x instanceof Toto; // true

Voir aussi