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

Повідомлення

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)

Тип помилки

TypeError тільки у строгому режимі.

Що сталось?

Була спроба видалити властивість, але ця властивість недоступна для налаштування. Атрибут configurable котролює, чи властивість об'єкта може бути видалена, та чи можна змінювати її атрибути (інші, крім writable).

Ця помилка виникає лише у строгому режимі. У нестрогому режимі оператор повертає false.

Приклади

Властивості, недоступні для налаштування, не є дуже поширеними, але їх можна створити за допомогою Object.defineProperty() або 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

Існують також кілька недоступних для налаштування властивостей, вбудованих у JavaScript. Можливо, ви намагались видалити математичну константу.

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

Див. також