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

A exceção do Javascript "property is non-configurable and can't be deleted" ocorre quando é feita a tentativa de deletar uma propriedade, mas a propriedade não é configurável.

Mensagem

js
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) 

Tipo de Erro

TypeError apenas no modo strict.

O que deu errado?

Foi feita a tentativa de deletar uma propriedade, mas esta propriedade não é configurável. O atributo configurable controla se a propriedade pode ser deletada do objeto e se seus atributos (Exceto writable) podem ser alterados.

Este erro acontece apenas no modo strict. No modo de código não estrito, a operação retorna false.

Exemplos

Tentando excluir uma propriedade não configurável

Propriedades não configuráveis não são comuns, mas podem ser criadas usando Object.defineProperty() ou Object.freeze().

js
"use strict"; var obj = Object.freeze({ name: "Elsa", score: 157 }); delete obj.score; // TypeError ("use strict"); var obj = {}; Object.defineProperty(obj, "foo", { value: 2, configurable: false }); delete obj.foo; // TypeError ("use strict"); var frozenArray = Object.freeze([0, 1, 2]); frozenArray.pop(); // TypeError 

Também existem algumas propriedades não configuráveis embutidas no Javascript. Talvez você tenha tentado deletar uma constante matemática.

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

Veja também