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

Message

TypeError: Unable to get property {x} of undefined or null reference (Edge)
TypeError: "x" is (not) "y" (Firefox)

Exemples :

TypeError: "x" is undefined
TypeError: "x" is null
TypeError: "undefined" is not an object
TypeError: "x" is not an object or null
TypeError: "x" is not a symbol

Type d'erreur

Quel est le problème ?

Un type inattendu a été rencontré. Cela se produit la plupart du temps avec les valeurs undefined ou null.

Certaines méthodes comme Object.create() ou Symbol.keyFor() ont des contraintes sur le type de valeur qui peut être passé en argument.

Exemples

Exemples invalides

js
// undefined et null : des valeurs
// sur lesquelles la méthode substring
// ne fonctionnera pas
var toto = undefined;
toto.substring(1); // TypeError: toto is undefined

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

// Certaines méthodes nécessitent une valeur
// d'un type spécifique
var toto = {};
Symbol.keyFor(toto); // TypeError: toto is not a symbol

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

Résoudre le problème

Pour résoudre ce problème et écarter les cas où la valeur vaut undefined, on peut par exemple utiliser l'opérateur typeof.

js
if (typeof toto !== "undefined") {
  // Désormais, on sait que toto est bien
  // défini et on peut poursuivre.
}

Voir aussi