TypeError: "x" is not a non-null object
Message
TypeError: Invalid descriptor for property {x} (Edge) TypeError: "x" is not a non-null object (Firefox) TypeError: Property description must be an object: "x" (Chrome) TypeError: Invalid value used in weak set (Chrome)
Type d'erreur
Quel est le problème ?
Un objet devrait être trouvé et n'est pas fourni. La valeur null
n'est pas un objet et ne fonctionnera pas, il est nécessaire de fournir un véritable objet pour que le code en question fonctionne.
Exemples
Absence d'un descripteur de propriété
Lorsqu'on utilise des méthodes telles que Object.create()
, Object.defineProperty()
ou Object.defineProperties()
, le paramètre optionnel de description des propriétés doit être un descripteur sous la forme d'un objet. Si la valeur fournie n'est pas un objet (mais par exemple un nombre), l'appel à la méthode déclenchera une erreur :
Object.defineProperty({}, "cle", 1);
// TypeError: 1 is not a non-null object
Object.defineProperty({}, "cle", null);
// TypeError: null is not a non-null object
Un descripteur de propriété valide aura la structure suivante :
Object.defineProperty({}, "cle", { value: "toto", writable: false });
Les clés de WeakMap
et WeakSet
sont des objets
Les objets WeakMap
et WeakSet
utilisent des objets comme clé. On ne peut pas utiliser d'autres types de valeurs pour les clés de ces objets.
var ws = new WeakSet();
ws.add("toto");
// TypeError: "toto" is not a non-null object
À la place, on utilisera des objets :
ws.add({ toto: "truc" });
ws.add(window);