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

在J*aScript中,对象的属性不仅仅是键值对,它们还拥有与之关联的属性描述符。其中,configurable 和 writable 是两个重要的布尔型描述符,控制着属性能否被修改或删除。理解它们的作用和区别,有助于更好地管理对象的结构和安全性。
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:控制属性描述符是否可配置
configurable: false 意味着你不能再用 Object.defineProperty() 修改该属性的任何描述符,包括 writable、enumerable、configurable 自身,也不能删除该属性。
一旦设置为 configurable: false,就无法再变回 true。
ChatCut
AI视频剪辑工具
1086
查看详情
示例:
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,反向则不行。
两者的关键区别
- writable 只控制属性值能否被更改
- configurable 控制属性本身能否被删除或进一步配置
- 即使 writable: false,只要 configurable: true,仍可通过
defineProperty将其改为 true - 但若 configurable: false,则大多数描述符锁定,不可逆
实际应用场景
这两个描述符常用于创建不可变对象或安全的API接口。
例如,库开发者可能希望某个配置属性不被用户随意修改或删除:
const config = {};
Object.defineProperty(config, 'version', {
value: '1.0.0',
writable: false,
configurable: false
});
这样既防止值被篡改,也防止属性被删除或重新定义。
基本上就这些。掌握 writable 和 configurable 的行为,能让你更精细地控制对象属性的行为。
以上就是JS对象属性描述符_Configurable与Writable的详细内容,更多请关注其它相关文章!
# 流式
# 奥迪营销推广文案
# seo网站优化培训文案
# 哈密规模大网站建设推荐
# 黑河建设局网站
# 前卫电影网站建设
# 通化seo软件有哪些
# 视频网站运营推广方案书
# 怎么用网站推广抖音视频
# 宿迁seo优化地址
# 优化网站的架构
# 将其
# 设为
# 模式下
# writable
# 的是
# 数据处理
# 键值
# 抛出
# 或删除
# 布尔
# red
# 键值对
# 区别
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
cad如何更改注释性对象的比例_cad注释性比例调整方法
解决移动端滚动问题的overflow属性应用指南
火锅吃太多会怎样 火锅吃太多会上火吗
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
AO3官网镜像链接 Archive of Our Own同人文在线浏览
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
4399免费游戏网址入口 4399小游戏免费入口点开即玩
快手赚钱渠道_快手收益来源
AO3官方可用镜像 Archive of Our Own网页版最新入口
2026年CSGO开箱网站推荐 CSGO开箱平台精选
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
晋江读书网页版在线登录 晋江读书电脑版官网
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Fabric模组开发:自定义物品与物品组的现代管理方法
J*aScript中管理异步API调用:确保操作顺序与数据一致性
J*aScript类型检查_j*ascript代码规范
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
天眼查企业查询官网入口 天眼查官方网页版查询
基于动态规划的房屋花卉种植最小成本算法详解
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
小米汽车11月交付量突破40000台!雷军:将继续努力
React/Next.js中实现列表项的动态选择与移动
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
mc.js免安装版 mc.js一键畅玩入口
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
steam官方入口大全 steam账号注册及操作指南
J*aScript数组对象转换:按指定键分组与值收集
J*aScript实现单选按钮与关联输入框的联动禁用教程
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
微博网页版首页入口 微博电脑端官网登录链接
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化


2025-11-17
浏览次数:次
返回列表