TypeError: ungültiger 'instanceof'-Operand 'x'
Die JavaScript-Ausnahme "ungültiger 'instanceof'-Operand" tritt auf, wenn der Operand auf der rechten Seite des instanceof
Operators nicht mit einem Konstruktorobjekt verwendet wird, d. h. einem Objekt, das über eine prototype
-Eigenschaft verfügt und aufrufbar ist.
Meldung
TypeError: Right-hand side of 'instanceof' is not an object (V8-based) TypeError: invalid 'instanceof' operand "x" (Firefox) TypeError: Right hand side of instanceof is not an object (Safari) TypeError: Right-hand side of 'instanceof' is not callable (V8-based) TypeError: x is not a function (Firefox) TypeError: x is not a function. (evaluating 'x instanceof y') (Safari) TypeError: Function has non-object prototype 'undefined' in instanceof check (V8-based) TypeError: 'prototype' property of x is not an object (Firefox) TypeError: instanceof called on an object with an invalid prototype property. (Safari)
Fehlertyp
Was ist schiefgelaufen?
Der instanceof
Operator erwartet, dass der Operand auf der rechten Seite ein Konstruktorobjekt ist, d. h. ein Objekt, das eine prototype
-Eigenschaft hat und aufrufbar ist. Es kann auch ein Objekt mit einer Symbol.hasInstance
-Methode sein. Dieser Fehler kann auftreten, wenn:
- Der Operand auf der rechten Seite kein Objekt ist.
- Der Operand auf der rechten Seite nicht aufrufbar ist und keine
Symbol.hasInstance
-Methode hat. - Der Operand auf der rechten Seite aufrufbar ist, aber dessen
prototype
-Eigenschaft kein Objekt ist. (Zum Beispiel haben Pfeilfunktionen keineprototype
-Eigenschaft.)
Beispiele
instanceof vs. typeof
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
42 instanceof 0; // TypeError: invalid 'instanceof' operand 0
function Foo() {}
const f = Foo(); // Foo() is called and returns undefined
const x = new Foo();
x instanceof f; // TypeError: invalid 'instanceof' operand f
x instanceof x; // TypeError: x is not a function
Um diese Fehler zu beheben, müssen Sie entweder den instanceof
Operator durch den typeof
Operator ersetzen oder sicherstellen, dass Sie den Funktionsnamen verwenden, anstatt das Ergebnis seiner Auswertung.
typeof "test" === "string"; // true
typeof 42 === "number"; // true
function Foo() {}
const f = Foo; // Do not call Foo.
const x = new Foo();
x instanceof f; // true
x instanceof Foo; // true