TypeError: property "x" is non-configurable and can't be deleted
Ngoại lệ JavaScript "property is non-configurable and can't be deleted" xảy ra khi cố gắng xóa một thuộc tính, nhưng thuộc tính đó là không thể cấu hình.
Thông báo
TypeError: Cannot delete property 'x' of #<Object> (V8-based) TypeError: property "x" is non-configurable and can't be deleted (Firefox) TypeError: Unable to delete property. (Safari)
Loại lỗi
TypeError chỉ trong strict mode.
Nguyên nhân?
Đã cố gắng xóa một thuộc tính, nhưng thuộc tính đó là không thể cấu hình. Thuộc tính configurable kiểm soát liệu thuộc tính có thể bị xóa khỏi đối tượng hay không và liệu các thuộc tính của nó (ngoài writable) có thể được thay đổi hay không.
Lỗi này chỉ xảy ra trong strict mode code. Trong non-strict code, thao tác sẽ trả về false.
Ví dụ
>Cố gắng xóa các thuộc tính không thể cấu hình
Các thuộc tính không thể cấu hình không phổ biến lắm, nhưng chúng có thể được tạo bằng Object.defineProperty() hoặc Object.freeze().
"use strict";
const obj = Object.freeze({ name: "Elsa", score: 157 });
delete obj.score; // TypeError
"use strict";
const obj = {};
Object.defineProperty(obj, "foo", { value: 2, configurable: false });
delete obj.foo; // TypeError
"use strict";
const frozenArray = Object.freeze([0, 1, 2]);
frozenArray.pop(); // TypeError
Cũng có một số thuộc tính không thể cấu hình được tích hợp sẵn trong JavaScript. Có thể bạn đã cố gắng xóa một hằng số toán học.
"use strict";
delete Math.PI; // TypeError