TypeError: "x" is (not) "y"

Mensagem

Tipo do erro: "x" é (não é) "y"

Exemplos:
Tipo do erro: "x" é indefinido
Tipo do erro: "x" é nulo
Tipo do erro: "x" indefinido" não é um objeto
Tipo do erro: "x" não é um objeto ou é nulo
Tipo do erro: "x" não é um símbolo

Tipo de erro

O que deu errado?

Houve um tipo inesperado. Isso ocorre muitas vezes com valores undefined ou null.

Além disso, certos métodos, tais como Object.create() ou Symbol.keyFor(), requerem um tipo específico, que deve ser fornecido.

Exemplos

Casos inválidos

js
// casos undefined e null nos quais o método substring não vai funcionar
var foo = undefined;
foo.substring(1); // TypeError: foo is undefined

var foo = null;
foo.substring(1); // TypeError: foo is null

// Certos métodos podem precisar de um tipo específico
var foo = {};
Symbol.keyFor(foo); // TypeError: foo is not a symbol

var foo = "bar";
Object.create(foo); // TypeError: "foo" is not an object or null

Consertando o problema

Para consertar o pointeiro nulo para valores undefined ou null, você pode utilizar o operador typeof , por exemplo.

js
if (typeof foo !== "undefined") {
  // Agora nós sabemos que foo está definido, então podemos prosseguir.
}

Veja também