TypeError: "x" ist (nicht) "y"

Der JavaScript-Ausnahmefehler "x ist (nicht) y" tritt auf, wenn ein unerwarteter Typ vorliegt. Häufig 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 schiefgelaufen ist

Es lag ein unerwarteter Typ vor. Dies tritt häufig bei undefined- oder null-Werten auf.

Bestimmte Methoden, wie Object.create() oder Symbol.keyFor(), benötigen einen spezifischen Typ, der bereitgestellt werden muss.

Beispiele

Ungültige Fälle

Sie können keine Methode auf einer undefined- oder null-Variablen aufrufen.

js
const foo = undefined;
foo.substring(1); // TypeError: foo is undefined

const foo2 = null;
foo2.substring(1); // TypeError: foo2 is null

Bestimmte Methoden benötigen möglicherweise einen spezifischen Typ.

js
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

Behebung des Problems

Um einen Nullzeiger zu undefined- oder null-Werten zu beheben, können Sie zuerst testen, ob der Wert undefined oder null ist.

js
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 seine Wahrheit überprüfen.

js
if (foo) {
  // Now we know that foo is truthy, it will necessarily not be null/undefined.
}

Siehe auch