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
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()
.
"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.
"use strict";
delete Math.PI; // TypeError