跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

JavaScript中configurable对属性删除与修改的控制

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

相关文章