## 消息

    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

## 另见

- delete operator
- `Object.defineProperty()`
- `Object.freeze()`