writable 控制属性值是否可修改,configurable 控制属性是否可删除或重新配置;前者设为 false 时赋值无效或报错,后者为 false 时无法修改描述符或删除属性,且不可逆。两者结合可用于创建不可变属性,如库中的安全配置项。

在JavaScript中,对象的属性不仅仅是键值对,它们还拥有与之关联的属性描述符。其中,configurable 和 writable 是两个重要的布尔型描述符,控制着属性能否被修改或删除。理解它们的作用和区别,有助于更好地管理对象的结构和安全性。
writable 描述符决定一个属性的值是否可以被重新赋值。
当 writable: false 时,尝试修改该属性的值将不会生效(在非严格模式下静默失败,在严格模式下抛出错误)。
示例:
const obj = {};
Object.defineProperty(obj, 'name', {
value: 'Alice',
writable: false
});
obj.name = 'Bob'; // 修改无效
console.log(obj.name); // 输出: Alice
如果使用严格模式,上述赋值会抛出 TypeError。
注意:const 声明的变量不可重新赋值,但这与对象属性的 writable 无关。const 只作用于变量绑定,不影响对象内部属性的 writable 状态。
configurable: false 意味着你不能再用 Object.defineProperty() 修改该属性的任何描述符,包括 writable、enumerable、configurable 自身,也不能删除该属性。
一旦设置为 configurable: false,就无法再变回 true。
示例:
const obj = {};
Object.defineProperty(obj, 'age', {
value: 25,
configurable: false
});
// 尝试删除
delete obj.age; // 无效
console.log(obj.age); // 仍然输出: 25
// 尝试修改 writable
Object.defineProperty(obj, 'age', { writable: true });
// 抛出 TypeError: Cannot redefine property: age
configurable 为 false 时,唯一可以改变的是将 writable: true 改为 false,反向则不行。
defineProperty 将其改为 true
这两个描述符常用于创建不可变对象或安全的API接口。
例如,库开发者可能希望某个配置属性不被用户随意修改或删除:
const config = {};
Object.defineProperty(config, 'version', {
value: '1.0.0',
writable: false,
configurable: false
});
这样既防止值被篡改,也防止属性被删除或重新定义。
基本上就这些。掌握 writable 和 configurable 的行为,能让你更精细地控制对象属性的行为。
以上就是JS对象属性描述符_Configurable与Writable的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号