新闻中心

JS对象属性描述符_Configurable与Writable

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

js对象属性描述符_configurable与writable

在J*aScript中,对象的属性不仅仅是键值对,它们还拥有与之关联的属性描述符。其中,configurablewritable 是两个重要的布尔型描述符,控制着属性能否被修改或删除。理解它们的作用和区别,有助于更好地管理对象的结构和安全性。

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 ChatCut

AI视频剪辑工具

ChatCut 1086 查看详情 ChatCut

示例:

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中实现统一对象行为接口_项目大型化时的接口规范化 

搜索