最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 configurable 语义在严格模式下的体现
时间:2026-07-01 11:22:46 编辑:袖梨 来源:一聚教程网
configurable 控制属性是否可删除及重新配置,严格模式下删除不可配置属性会抛出 TypeError,而非严格模式仅返回 false;configurable: true 是 delete 成功的唯一前提。
JavaScript 中 configurable 控制的是属性是否可被删除、是否可被重新配置(比如改写 writable、enumerable 或再次定义 get/set)。它在严格模式下最直接的体现,就是让“试图删除不可配置属性”这一操作从静默失败变成明确报错。
不可删除的属性在严格模式下会抛出 TypeError
非严格模式下,对 configurable: false 的属性使用 delete 会返回 false,但不报错;严格模式下,这会直接触发运行时错误。
- 全局变量声明(如
var x = 1)创建的属性,默认configurable: false,无法删除 - 用
Object.defineProperty显式设为configurable: false的属性,也无法删除 - 函数形参、arguments 对象的属性、部分内置对象属性(如
Array.prototype.length)也默认不可配置
严格模式强化了 configurable 的约束力
它不只是影响 delete 操作,还统一了对属性描述符修改的限制逻辑:
- 尝试将
configurable: false的属性改为configurable: true—— 严格模式下报错 - 尝试修改该属性的
value或writable等其他描述符(只要configurable是false)—— 同样报错(除非只改value且writable: true) - 对象本身若被设为不可扩展(
Object.preventExtensions()),再加新属性也会在严格模式下报错,这与configurable的“不可逆性”精神一致
configurable 和 delete 的关系是核心表现点
这是开发者最容易踩坑的地方。例如:
立即学习“Java免费学习笔记(深入)”;
"use strict";var obj = {};Object.defineProperty(obj, 'name', { value: 'Alice', configurable: false});delete obj.name; // TypeError: Cannot delete property 'name' of object
而如果把 configurable: true,哪怕其他描述符都设为 false,delete 就能成功:
-
configurable: true是唯一允许后续调用delete的前提 -
delete成功后,该属性彻底从对象上移除,不再参与任何属性访问或枚举 - 即使
writable: false或enumerable: false,只要configurable: true,仍可删
严格模式让 configurable 的语义更“诚实”
它消除了非严格模式下那种“假装删了但其实没删”的模糊行为,强制开发者直面属性的设计意图:
- 你定义一个不可配置属性,就等于说“这个属性是契约的一部分,不该被外部破坏”
- 严格模式让这个契约在运行时具有效力,而不是靠文档或约定来维系
- 这对构建健壮的库、封装私有状态、防止意外覆盖非常关键
相关文章
- 寻道大千精怪最强搭配阵容是什么 07-03
- 失落城堡2隐藏关卡解锁方法 07-03
- 原神越之匙双手剑强度详析 07-03
- 《暗区突围》S18原爆点赛季上线:生化PVE模式开放 07-03
- 逆水寒手游幽蛊南疆玩法攻略 07-03
- 百炼英雄粉色小树的采集位置角落一览 07-03