TypeError: property "x" is non-configurable and can't be deleted

Message

TypeError: Calling delete on 'x' is not allowed in strict mode (Edge)
TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
TypeError: Cannot delete property 'x' of #<Object> (Chrome)

Type d'erreur

TypeError in strict mode only.

Quel est le problème ?

Une instruction demande la suppression d'une propri√©t√© non-configurable. L'attribut configurable permet de contr√īler si la propri√©t√© peut √™tre supprim√©e de l'objet auquel elle est rattach√©e et si ces attributs (en dehors de writable) peuvent √™tre modifi√©s.

Cette erreur ne se produit qu'en mode strict. En mode non-strict, l'opération de suppression renverra false.

Exemples

Les propri√©t√©s non-configurables ne sont pas tr√®s fr√©quentes mais il est possible d'en cr√©er gr√Ęce √† Object.defineProperty() ou √†  Object.freeze().

"use strict";
var obj = Object.freeze({name: "Elsa", score: 157});
delete obj.score;  // TypeError

"use strict";
var obj = {};
Object.defineProperty(obj, "toto", {value: 2, configurable: false});
delete obj.toto;  // TypeError

"use strict";
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray.pop();  // TypeError

Certaines propriétés natives de JavaScript sont non-configurables. Peut-être que le code tente de supprimer une constante mathématique :

"use strict";
delete Math.PI;  // TypeError

Voir aussi