讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript对象操作_属性描述符与密封冻结

夏萱君_7915

夏萱君_7915

发布时间:2025-11-26 13:48:06

|

696人浏览过

|

来源于php中文网

原创

JavaScript通过属性描述符、seal和freeze控制对象可变性:属性描述符可设置writable、enumerable、configurable;Object.seal禁止增删属性,Object.freeze完全锁定对象,但均为浅层操作。

javascript对象操作_属性描述符与密封冻结

JavaScript中的对象是动态的,可以随时添加、修改或删除属性。但通过属性描述符、密封(seal)和冻结(freeze)等机制,我们可以更精细地控制对象的行为,提升代码的安全性和稳定性。

属性描述符:控制属性的特性

每个对象属性都有一个与之关联的属性描述符,它是一个包含元信息的内部对象。描述符决定了属性是否可写、可枚举、可配置等。

使用 Object.getOwnPropertyDescriptor() 可查看某个属性的描述符:

const obj = { name: 'Alice' };
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));

输出通常为:

立即学习“Java免费学习笔记(深入)”;

{ value: 'Alice', writable: true, enumerable: true, configurable: true }

你可以通过 Object.defineProperty() 自定义这些特性:

  • writable:决定属性值能否被修改
  • enumerable:决定该属性是否会出现在 for...in 或 Object.keys() 中
  • configurable:决定属性能否被删除,以及其描述符能否再被修改

示例:创建一个不可枚举且不可删除的属性

const user = {};
Object.defineProperty(user, 'id', {
  value: 123,
  writable: false,
  enumerable: false,
  configurable: false
});

Java注释规范Skills
Java注释规范Skills

当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。

下载

此时 user.id 的值无法更改,不会出现在 Object.keys(user) 中,也不能用 delete user.id 删除。

对象密封:禁止添加或删除属性

使用 Object.seal() 可以“密封”一个对象。密封后的对象:

  • 不能添加新属性
  • 不能删除已有属性
  • 已有属性的 configurable 被设为 false
  • 属性值仍可能被修改(除非 writable 为 false)

判断对象是否被密封,可用 Object.isSealed():

const sealedObj = { x: 1 };
Object.seal(sealedObj);
sealedObj.x = 2; // 允许
sealedObj.y = 3; // 无效(非严格模式下静默失败)
delete sealedObj.x; // 无效
console.log(Object.isSealed(sealedObj)); // true

对象冻结:彻底锁定对象

使用 Object.freeze() 可以“冻结”对象,这是最严格的保护方式。冻结后的对象:

  • 不能添加新属性
  • 不能修改现有属性值(所有属性 writable 设为 false)
  • 不能删除属性
  • 整个对象变为只读

检查对象是否被冻结:Object.isFrozen()

示例:

const frozenObj = { data: [1, 2, 3] };
Object.freeze(frozenObj);
frozenObj.data.push(4); // 注意:data 是引用,数组本身未被冻结
frozenObj.data = []; // 无效
console.log(Object.isFrozen(frozenObj)); // true

注意:冻结是浅层的。若属性值是对象或数组,其内部仍可变。如需深冻结,需递归处理。

基本上就这些。掌握属性描述符、seal 和 freeze,能让你更好地控制对象的可变性,避免意外修改,在开发库或共享数据结构时特别有用。不复杂但容易忽略。

热门AI工具

更多
创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2278

2023.09.20

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2641

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

376

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

397

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

472

2026.05.09

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

3151

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

945

2023.12.29

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

876

2023.08.08

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 20.7万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn