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

JavaScript 異常 "property is non-configurable and can't be deleted" 發生在嘗試刪除一個屬性,但該屬性是不可配置的

訊息

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)

錯誤型別

TypeError 僅在嚴格模式下。

哪裡出錯了?

嘗試刪除一個屬性,但該屬性是不可配置的configurable 屬性控制該屬性是否可以從物件中刪除,以及其屬性(除了 writable 之外)是否可以更改。

此錯誤僅在嚴格模式程式碼中發生。在非嚴格模式程式碼中,該操作返回 false

示例

嘗試刪除不可配置的屬性

不可配置的屬性不常見,但它們可以使用 Object.defineProperty()Object.freeze() 建立。

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

JavaScript 中也有一些內建的不可配置屬性。也許你嘗試刪除一個數學常數。

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

另見