最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 writable 属性于对象字面量中是如何默认配置的
时间:2026-07-08 11:45:46 编辑:袖梨 来源:一聚教程网
对象字面量属性的writable默认为true,即属性值可被直接修改;而Object.defineProperty默认writable为false,需显式设置才可写。
在对象字面量中创建的属性,writable 默认为 true,这意味着属性值可以直接被赋值修改。
对象字面量属性的 writable 行为
当你用 { key: value } 方式声明对象时,JavaScript 自动为每个属性设置完整的数据描述符,且三个关键布尔特性都默认开启:
-
writable: true — 允许后续通过
obj.key = newValue修改值 -
enumerable: true — 属性会出现在
for...in和Object.keys()中 -
configurable: true — 允许删除该属性,或用
Object.defineProperty重新配置其描述符
与 defineProperty 的关键区别
这种默认行为和 Object.defineProperty 完全不同:后者在只传 value 时不显式指定其他特性,writable、enumerable、configurable 全部默认为 false。
- 字面量:
const obj = { x: 1 };→x可写、可枚举、可配置 - defineProperty:
Object.defineProperty(obj, 'y', { value: 2 });→y不可写、不可枚举、不可配置(除非手动设为 true)
验证 writable 状态的方法
可以用 Object.getOwnPropertyDescriptor 查看实际描述符:
立即学习“Java免费学习笔记(深入)”;
const obj = { a: 42 };console.log(Object.getOwnPropertyDescriptor(obj, 'a'));// 输出:{ value: 42, writable: true, enumerable: true, configurable: true }
注意:这个状态无法通过点号或方括号语法反向修改;想改 writable,必须再次调用 Object.defineProperty,且前提是 configurable 仍为 true。
设为 false 后的实际表现
一旦 writable: false,赋值操作的效果取决于执行环境:
- 非严格模式下:
obj.a = 99静默失败,obj.a保持原值 - 严格模式下:
"use strict"; obj.a = 99立即抛出TypeError
这和 const 声明变量不同——const obj = {...} 锁的是变量绑定,不影响对象内部属性的可写性。
相关文章
- 诛仙2玩法是什么 07-08
- 异环伊波恩合伙人行动任务完成指引 07-08
- DNF盛夏沁甜菠萝宝珠1属性全览 07-08
- DNF盛夏惬意特饮属性全览 07-08
- 理智边缘好玩不 理智边缘玩法简介 07-08
- 崩坏星穹铁道千冶刃玩法解析 07-08