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() (en-US), 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