configurable 控制属性是否可删除及重新配置,严格模式下删除不可配置属性会抛出 TypeError,而非严格模式仅返回 false;configurable: true 是 delete 成功的唯一前提。
JavaScript 中 configurable 控制的是属性是否可被删除、是否可被重新配置(比如改写 writable、enumerable 或再次定义 get/set)。它在严格模式下最直接的体现,就是让“试图删除不可配置属性”这一操作从静默失败变成明确报错。
非严格模式下,对 configurable: false 的属性使用 delete 会返回 false,但不报错;严格模式下,这会直接触发运行时错误。
var x = 1)创建的属性,默认 configurable: false,无法删除Object.defineProperty 显式设为 configurable: false 的属性,也无法删除Array.prototype.length)也默认不可配置它不只是影响 delete 操作,还统一了对属性描述符修改的限制逻辑:
configurable: false 的属性改为 configurable: true —— 严格模式下报错value 或 writable 等其他描述符(只要 configurable 是 false)—— 同样报错(除非只改 value 且 writable: true)Object.preventExtensions()),再加新属性也会在严格模式下报错,这与 configurable 的“不可逆性”精神一致这是开发者最容易踩坑的地方。例如:
立即学习“Java免费学习笔记(深入)”;
"use strict";var obj = {};Object.defineProperty(obj, 'name', { value: 'Alice', configurable: false});delete obj.name; // TypeError: Cannot delete property 'name' of object
而如果把 configurable: true,哪怕其他描述符都设为 false,delete 就能成功:
configurable: true 是唯一允许后续调用 delete 的前提delete 成功后,该属性彻底从对象上移除,不再参与任何属性访问或枚举writable: false 或 enumerable: false,只要 configurable: true,仍可删它消除了非严格模式下那种“假装删了但其实没删”的模糊行为,强制开发者直面属性的设计意图: