TypeError: "x" ist (nicht) "y"
Der JavaScript-Fehler "x ist (nicht) y" tritt auf, wenn ein unerwarteter Typ vorhanden ist. Oftmals handelt es sich um unerwartete undefined
- oder null
-Werte.
Nachricht
TypeError: Cannot read properties of undefined (reading 'x') (V8-based) TypeError: "x" is undefined (Firefox) TypeError: "undefined" is not an object (Firefox) TypeError: undefined is not an object (evaluating 'obj.x') (Safari) TypeError: "x" is not a symbol (V8-based & Firefox) TypeError: Symbol.keyFor requires that the first argument be a symbol (Safari)
Fehlertyp
Was ist schiefgelaufen?
Es gab einen unerwarteten Typ. Dies tritt häufig bei undefined
- oder null
-Werten auf.
Auch erfordern bestimmte Methoden, wie Object.create()
oder Symbol.keyFor()
, einen bestimmten Typ, der bereitgestellt werden muss.
Beispiele
Ungültige Fälle
Sie können keine Methode auf einer undefined
- oder null
-Variable aufrufen.
const foo = undefined;
foo.substring(1); // TypeError: foo is undefined
const foo2 = null;
foo2.substring(1); // TypeError: foo2 is null
Bestimmte Methoden könnten einen bestimmten Typ erfordern.
const foo = {};
Symbol.keyFor(foo); // TypeError: foo is not a symbol
const foo2 = "bar";
Object.create(foo2); // TypeError: "foo2" is not an object or null
Beheben des Problems
Um einen Nullzeiger auf undefined
- oder null
-Werte zu beheben, können Sie zuerst testen, ob der Wert undefined
oder null
ist.
if (foo !== undefined && foo !== null) {
// Now we know that foo is defined, we are good to go.
}
Oder, wenn Sie sicher sind, dass foo
kein anderer falsy-Wert wie ""
oder 0
sein wird, oder wenn das Filtern dieser Fälle kein Problem darstellt, können Sie einfach auf seine Wahrhaftigkeit testen.
if (foo) {
// Now we know that foo is truthy, it will necessarily not be null/undefined.
}