configurable 是属性描述符中控制属性可配置性的布尔值:configurable: false 时属性不可删除、不可修改描述符(writable 从 true 改 false 除外)、不可转换属性类型;默认值因创建方式而异,字面量赋值为 true,defineProperty 未指定时为 false。
在 JavaScript 中,
是属性描述符(property descriptor)中的一个布尔值,它直接决定该属性能否被删除、能否修改其描述符(比如
、
、
本身),以及能否从数据属性转为访问器属性(或反之)。
configurable: false 时无法删除属性
当一个属性的
为
,调用
操作符将失败(严格模式下抛出
,非严格模式下静默返回
):
configurable: false 时无法修改属性描述符
一旦
设为
,后续对同一属性调用
修改任何描述符(包括
、
、
自身)都会报错,除非是把
改为
(这个例外仅适用于数据属性):
✅ 允许(前提是原先是
)
❌ 报错
❌ 报错(不可逆)
configurable 控制属性类型转换
只有
的属性,才能在数据属性和访问器属性之间切换。例如:
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
Java免费学习笔记(深入)
”;
但如果
,尝试用
把它改成 getter/setter,会立即报错。
默认情况下,var/let/const 声明和对象字面量属性的 configurable 值
不同方式创建的属性,
默认值不同:
变量声明(
/
/
)绑定到全局对象(如浏览器中
)时,
为
(所以不能被
)
对象字面量中的属性(如
)或使用点号/方括号赋值(
)创建的属性,
默认为
显式定义时,若未指定
,默认为
configurablewritableenumerableconfigurableconfigurablefalsedeleteTypeErrorfalseconst obj = {};
Object.defineProperty(obj, 'name', {
value: 'Alice',
configurable: false
});
delete obj.name; // false(非严格模式)或 TypeError(严格模式)
console.log(obj.name); // 'Alice'
configurablefalseObject.defineProperty()writableenumerableconfigurablewritable: truefalseObject.defineProperty(obj, 'name', { writable: false })writable: trueObject.defineProperty(obj, 'name', { enumerable: true })Object.defineProperty(obj, 'name', { configurable: true })configurable: trueconst obj = { age: 25 };
// 可以先定义为数据属性
Object.defineProperty(obj, 'age', { configurable: true });
// 然后改为 getter
Object.defineProperty(obj, 'age', {
get() { return 26; },
configurable: true
});
configurable: falsedefinePropertyconfigurablevarletconstwindowconfigurablefalsedelete{ a: 1 }obj.b = 2configurabletrueObject.defineProperty()configurablefalse