当前位置: 首页 > news >正文

除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?

除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?

在这里插入图片描述

前言

在前端开发中,性能优化是一个永恒的话题。当我们处理大型对象或频繁操作对象时,JavaScript 提供的对象限制方法能有效提升代码执行效率。众所周知的 Object.freeze() 可以冻结对象,但 ECMAScript 还提供了其他类似方法。本文将详细介绍这些方法的使用场景、差异和性能优化原理,并辅以代码示例和对比表格。


一、对象限制方法分类

JavaScript 提供了三个层级的方法来控制对象的行为,按限制严格程度排序如下:

  1. Object.preventExtensions()
  2. Object.seal()
  3. Object.freeze()

1. Object.preventExtensions()

  • 作用:禁止对象添加新属性
  • 允许操作:可删除或修改已有属性
  • 检测方法Object.isExtensible(obj)
const obj = { name: "Alice" };
Object.preventExtensions(obj);obj.age = 25;       // 静默失败(严格模式下报错)
delete obj.name;    // 成功
obj.name = "Bob";   // 成功

2. Object.seal()

  • 作用:禁止添加/删除属性
  • 允许操作:修改已有属性的值
  • 检测方法Object.isSealed(obj)
const obj = { id: 1 };
Object.seal(obj);obj.id = 2;         // 成功
obj.name = "New";   // 失败
delete obj.id;      // 失败

3. Object.freeze()

  • 作用:禁止任何属性变更(最严格)
  • 检测方法Object.isFrozen(obj)
const obj = { score: 90 };
Object.freeze(obj);obj.score = 100;    // 失败
delete obj.score;   // 失败

二、方法对比表格

方法添加属性删除属性修改属性值可逆性
Object.preventExtensions()✔️✔️不可逆
Object.seal()✔️不可逆
Object.freeze()不可逆

三、高级技巧与注意事项

1. 深度冻结对象

上述方法均为浅层操作,嵌套对象需递归处理:

function deepFreeze(obj) {Object.freeze(obj);Object.keys(obj).forEach(key => {if (typeof obj[key] === 'object' && !Object.isFrozen(obj[key])) {deepFreeze(obj[key]);}});
}const nestedObj = { data: { x: 1 } };
deepFreeze(nestedObj);
nestedObj.data.x = 2; // 失败

2. 性能优化场景

  • Vue 2.x:使用 Object.freeze() 跳过响应式转换
  • 配置对象:防止意外修改
  • 不可变数据:Redux 状态管理中确保纯函数特性

四、代码实战案例

案例1:防止动态扩展配置

const config = {apiUrl: "https://api.example.com",timeout: 5000
};Object.seal(config);// 尝试修改
config.retry = 3;      // 失败(非严格模式下静默失败)
config.timeout = 3000; // 成功

案例2:提升渲染性能

// Vue 组件中冻结大数据列表
export default {data() {return {bigData: Object.freeze(fetchHugeList())}}
}

五、总结

方法选择策略适用场景
preventExtensions()需要防止属性增加但允许修改/删除
seal()固定属性结构但允许值变化
freeze()需要完全不可变的配置或数据

通过合理使用这三种方法,开发者可以:

  1. 避免意外的对象修改
  2. 提升代码可预测性
  3. 优化框架(如 Vue、React)的渲染性能
  4. 符合函数式编程的不可变性要求

建议在大型项目、高频操作对象或需要严格数据控制的场景中优先考虑这些方法。


扩展思考:如何结合 Proxy 实现更灵活的对象控制?欢迎在评论区讨论!

相关文章:

除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?

除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法? 前言 在前端开发中,性能优化是一个永恒的话题。当我们处理大型对象或频繁操作对象时,JavaScript 提供的对象限制方法能有效提升代码执行效率。众所周知的 Obje…...

实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析

依托AIRIOT智慧系统搭建平台构建的AIRIOT智慧养老管理系统,通过管理驾驶舱、健康管理、生活服务与安全监控、综合管理五大核心模块,构建覆盖“数据感知→智能分析→服务联动→安全保障”的全链路养老管理体系,助力养老机构实现精细化、智能化…...

【硬件系统架构】哈佛架构

一、引言 在计算机科学的浩瀚宇宙中,计算机体系结构犹如星辰般繁多且各有独特光芒。哈佛架构便是其中一颗耀眼的明星,它在众多计算机体系结构中占据着独特而重要的地位。从计算机技术的萌芽期一路走来,哈佛架构不断发展演变,在不同…...

晶振PCB设计核心要点与规范

一、布局与走线设计 位置优先原则: 晶振紧邻主控芯片(如MCU、FPGA)时钟输入引脚,最大走线长度≤10mm。 远离高速信号线(如DDR、USB差分对),间距≥3倍线宽,避免串扰。 对称走线&am…...

Dyna螺栓预紧力

01 前处理 1.1 几何模型构建 用ls-prepost进行建模,模型构建如图 1所示。 图 1 模型 1.2 网格模型构建 在ls-prepost中进行网格划分,最终效果图如图 2所示。 图 2 网格模型 1.3 有限元模型构建 1.3.1 材料定义 设置两种材料,均使用线弹…...

排序算法详解笔记

评价维度 运行效率就地性稳定性 自适应性:自适应排序能够利用输入数据已有的顺序信息来减少计算量,达到更优的时间效率。自适应排序算法的最佳时间复杂度通常优于平均时间复杂度。 是否基于比较:基于比较的排序依赖比较运算符(…...

喷泉码技术在现代物联网中的应用 设计

喷泉码技术在现代物联网中的应用 摘 要 喷泉码作为一种无速率编码技术,凭借其动态生成编码包的特性,在物联网通信中展现出独特的优势。其核心思想在于接收端只需接收到足够数量的任意编码包即可恢复原始数据,这种特性使其特别适用于动态信道和多用户场景。喷泉码的实现主要…...

LVDS系列10:Xilinx 7系可编程输入延迟(三)

这节继续讲解IDELAYE2和IDELAYCTRL的VARIABLE模式、VAR_LOAD模式和VAR_LOAD_PIPE模式的仿真测试;  VARIABLE模式使用: VARIABLE模式需要使用INC和CE端口控制抽头值的递增递减变化; 测试代码如下: module top_7series_idelay( i…...

QT:自定义ComboBox

实现效果: 实现combobox的下拉框区域与item区域分开做UI交互显示。 支持4种实现效果,如下 效果一: 效果二: 效果三: 效果四: 实现逻辑: ui由一个toolbutton和combobox上下组合成,重点在于combobox。 我设置了4种枚举,ButtonWithComboBox对应效果一;OnlyButt…...

Python爬虫学习路径与实战指南 02

一、进阶技巧与工具 1、处理复杂反爬机制 验证码破解(谨慎使用): 简单图像验证码:使用 pytesseract(OCR识别) PIL 处理图像。 复杂验证码:考虑付费API(如打码平台)。 …...

Crawl4AI,智能体网络自动采集利器

Crawl是一个强大的工具,它赋予AI智能体更高的效率和准确性执行网络爬取和数据提取任务。其开源特性、AI驱动的能力和多功能性,使其成为构建智能且数据驱动智能体的宝贵资产,告别繁琐: 爬虫新宠 crawl4ai,数行代码搞定数据采集,AI …...

C语言实现卡ID启用排序

任务: typedef struct {uint8_t bindflag; uint8_t userCardNumber; //当前用户卡的数据uint32_t userCardId[7];//当前6个用户的卡ID }USER_NFC;结构体中bindflag从高到低的的高七位bit表示数组userCardId中低到高卡ID的启用禁用状态,userC…...

html css js网页制作成品——HTML+CSS甜品店网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

漫反射实现+逐像素漫反射+逐像素漫反射实现

标准光照的构成结构 自发光:材质本身发出的光,模拟环境使用的光 漫反射光:光照在粗糙材质后,光的反射方向随机,还有一些光发生了折射,造成材质 表面没有明显的光斑。 高光反射光:光照到材质表面…...

nginx代理websocket时ws遇到仅支持域名访问的处理

最终改造点 proxy_set_header Host 这一行 未改之前遇到的问题: nginx 日志显示 https://aaa.bbbb.cn:7413 被解析成了 IP 地址,这通常是因为 DNS 解析的结果被缓存或某些中间层(如负载均衡器、防火墙等)将域名替换为 IP 地址。…...

具身智能:从理论突破到场景落地的全解析

一、具身智能:重新定义 “智能” 的物理边界 (一)概念本质与核心特征 具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区…...

用Postman验证IAM Token的实际操作

当我们需要用Postman发送一个最简单的请求去验证Token的时候我们该怎么办? 【一、步骤】 步骤1:打开Postman,新建一个GET请求 请求地址填: https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解释一下:…...

CH592/CH582 触摸按键应用开发实例讲解

一. 触摸原理介绍 1. 触摸按键电容产生原理 一般应用中,可用手指与触摸板的电容模型简化代替人体与触摸板的电容模型,如图所示。 沁恒微电子的电容触摸按键检测方案主要有以下两种: (1) 电流源充电方案。 低功耗蓝牙系列、通用系列 MCU 使…...

为什么选择有版权的答题pk小程序

选择有版权的答题PK小程序主要有以下原因: 一、避免法律风险 随着国家对知识产权保护力度的加大,使用无版权的答题PK小程序可能会引发侵权纠纷。一旦被原作者或版权方发现,使用者可能会面临法律诉讼,需要承担相应的法律责任&…...

Java生成微信小程序码及小程序短链接

使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接 在pom.xml文件中引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7…...

从普查到防控:ArcGIS洪水灾害全流程分析技术实战——十大专题覆盖风险区划/淹没制图/水文分析/洪水分析/淹没分析/项目交流,攻克防洪决策数据瓶颈!

&#x1f50d; 防范未然的关键一步&#xff1a;洪水灾害普查是筑牢防洪安全防线的基础。通过全面普查&#xff0c;可以精准掌握洪水灾害的分布、频率和影响范围&#xff0c;为后续的防洪规划、资源调配和应急响应提供详实的数据支持。这有助于提前识别潜在的高风险区域&#xf…...

Ubuntu安装SRS流媒体服务

通过网盘分享的文件&#xff1a;srs 链接: https://pan.baidu.com/s/1tdnxxUWh8edcSnXrQD1uLQ?pwd0000 提取码: 0000 官网地址&#xff1a;Build | SRS 将百度网盘提供的srs 和 conf 下载或上传到指定服务器 # 安装需要的依赖包 sudo apt install -y cmake tclsh unzip gcc…...

设计模式(行为型)解释器模式

定义 给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。这意味着我们能够针对特定领域的问题&#xff0c;构建一套专属的语言体系&#xff0c;并通过解释器对使用该语言描述的问题进行解析和处…...

海外独立站VUE3加载优化

主要有几个明显问题 1. 请求数量太多&#xff08;139 requests&#xff09; 网页请求了*大量 JS 文件*&#xff08;都是 index-xxxx.js&#xff09;&#xff0c;而且每个文件都比较小。 每次建立请求都有 TCP 连接开销&#xff08;特别是 HTTP/1.1&#xff09;&#xff0c;导…...

关于windows API 的键鼠可控可测

相关函数解释 GetAsyncKeyState 是 Windows API 中的一个函数&#xff0c;用于判断某个虚拟键是否被按下。GetAsyncKeyState(VK_ESCAPE) 专门用于检测 Esc 键的状态。下面为你详细介绍其用法&#xff1a; 函数原型 cpp SHORT GetAsyncKeyState( int vKey ); 参数 vKey&a…...

普发ASM392EUV检漏仪维修说明手测内容可目录

普发ASM392EUV检漏仪维修说明手测内容可目录...

Python pip下载包及依赖到指定文件夹

要使用pip下载包及其所有依赖到指定文件夹&#xff0c;请按照以下步骤操作&#xff1a; 步骤说明 使用pip download命令&#xff1a;该命令用于下载包及其依赖而不安装。指定目标目录&#xff1a;通过-d或--dest参数设置下载路径。确保包含依赖&#xff1a;默认情况下会下载依…...

DIFY 又跟新了,来到 1.3.0 版本,看正文

欢迎来到 1.3.0 版本&#xff01;添加了各种巧妙的功能、修复了错误&#xff0c;并带来了一些新功能&#xff1a; 一、核心亮点&#xff1a; 结构化输出 1、LLM 节点新增JSON Schema编辑器&#xff0c;确保大语言模型能够返回符合预设格式的JSON数据。这一功能有助于提升数据…...

凸包问题 Graham 扫描算法 MATLAB

算法要解决的问题 Graham 扫描算法要解决的问题是在给定一组二维平面上的点集时&#xff0c;找出能够完全包含这些点的最小凸多边形&#xff0c;这个最小凸多边形就是这些点的凸包。在很多实际场景中&#xff0c;我们可能只关注一个点集的最外层边界&#xff0c;而凸包算法就可…...

es+kibana---集群部署

其实一般es要跑3个节点的&#xff0c;这样才能做高可用&#xff0c;处理并发大&#xff0c;但是我这里只是一个pod mkdir -p /stroe/data/es es搭建&#xff1a; #【拉取镜像】 #docker pull elasticsearch:6.8.7 #docker pull busybox:1.28 【导入镜像】 docker load -i es.…...

定时器的源码介绍与简单实现——多线程编程简单案例[多线程编程篇(5)]

目录 前言 什么是定时器 JAVA标准库中的定时器 而关于sched方法,请看源码: 为什么我们能知道"notify() 唤醒后台线程 TimerThread"? TimerThread 关键逻辑 第一步&#xff1a;加锁 queue&#xff0c;看有没有任务 第二步&#xff1a;取出最近要执行的任务 …...

SQL常用数据清洗语句

数据清洗&#xff1a;发现并纠正数据文件里的数据错误和不一致性&#xff0c;让数据达到分析要求的过程。 运用 SQL 进行数据清洗时&#xff0c;可借助多种语句和函数来处理数据中的缺失值、重复值、异常值以及格式错误等问题。 1. 处理缺失值 数据中某些变量的值为空的情况&…...

《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》

在电商数据处理领域&#xff0c;高效获取并处理海量商品数据是企业实现精准运营、市场分析的重要基础。Go 语言凭借其出色的并发性能&#xff0c;成为开发高并发爬虫的理想选择。本文将介绍如何使用 Go 语言进行淘宝商品 API 实时采集&#xff0c;并构建 ETL&#xff08;Extrac…...

大模型(LLMs)加速篇

当前优化模型最主要技术手段有哪些&#xff1f; 算法层面&#xff1a;蒸馏、量化软件层面&#xff1a;计算图优化、模型编译硬件层面&#xff1a;FP8&#xff08;NVIDIA H系列GPU开始支持FP8&#xff0c;兼有fp16的稳定性和int8的速度&#xff09; 推理加速框架有哪一些&#…...

Linux0.11引导启动程序:简略过程

引言 目标&#xff1a;是重写boot文件夹下面的引导文件&#xff0c;加入一些个人信息。语法&#xff1a;由于使用两个语法风格的汇编需要两个汇编器&#xff0c;有些麻烦&#xff0c;直接全都用GNU的 as(gas)进行编译。使用AT&T 语法的汇编语言程序。接下来先拜读同济大学赵…...

【JAVAFX】controller中反射调用@FXML的点击事件失败

场景 当前有一个controller中定义的事件如 FXMLvoid openZhengjieWindow(ActionEvent event) {System.out.println("zhengjie");}通过反射去调用 public void callMethodByString(String methodSuffix) {try {Method method this.getClass().getMethod("open&…...

人工智能数学基础(二):初等数学

在人工智能领域&#xff0c;初等数学知识是构建复杂模型的基石。本文将从函数、数列、排列组合与二项式定理、集合等方面进行讲解&#xff0c;并结合 Python 编程实现相关案例&#xff0c;帮助大家更好地理解和应用这些数学知识。资源绑定附上完整代码供读者参考学习&#xff0…...

opendds的配置

配置的使用 文档中说明有4种使用配置的方式&#xff1a; 环境变量 命令行参数&#xff08;将覆盖环境变量中的配置&#xff09; 配置文件&#xff08;不会覆盖环境变量或命令行参数中的配置&#xff09; 用户调用的 API&#xff08;将覆盖现有配置&#xff09; 这里对开发…...

mac 基于Docker安装minio

在 macOS 上基于 Docker 安装 MinIO 是一个高效且灵活的方案&#xff0c;尤其适合本地开发或测试环境。以下是详细的安装与配置步骤&#xff0c;结合了最佳实践和常见问题的解决方案&#xff1a; 一、安装 Docker Desktop 下载安装包 访问 Docker 官网&#xff0c;下载适用于 …...

Docker网络架构深度解析与技术实践

目录 第一章 Docker网络架构核心原理 1.1 容器网络模型&#xff08;CNM&#xff09;体系 1.2 网络命名空间隔离机制 1.3 虚拟网络设备对&#xff08;veth&#xff09; 1.4 网桥驱动模型 第二章 Docker网络模式深度剖析 2.1 Bridge模式&#xff08;默认模式&#xff09; …...

如何通过Google Chrome增强网页内容的安全性

在现代互联网环境中&#xff0c;网页安全问题时常困扰着用户。谷歌浏览器作为全球使用最广泛的浏览器之一&#xff0c;提供了多种方式帮助用户增强网页的安全性。以下是一些简单有效的方法&#xff0c;可以帮助用户提高浏览器的安全防护能力。 首先&#xff0c;谷歌浏览器自带了…...

劳动节ppt免费下载,劳动节ppt模板,劳动节课件

劳动节ppt免费下载,劳动节ppt模板&#xff0c;劳动节素材&#xff0c;学生&#xff0c;幼儿园课件:劳动节ppt_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...

应用在通信网络设备的爱普生晶振SG2016CBN

在数字化浪潮席卷全球的当下&#xff0c;通信网络已成为信息时代的核心基础设施&#xff0c;从 5G 基站的快速部署到数据中心的高效运转&#xff0c;从光纤网络的稳定传输到无线通信的流畅连接&#xff0c;每一个环节都对时钟信号的稳定性和精准性有着极高要求。一个高质量的时…...

STM32 RTC配置

一、什么是RTC&#xff1f; RTC&#xff0c;即实时时钟&#xff0c;是一种能持续运行并保持当前时间信息的电子装置。它常用于在设备断电的情况下依然能保持准确的年、月、日、时、分、秒信息。 与CPU核心时钟不同&#xff0c;RTC通常采用独立的低频晶振&#xff08;如32.768…...

图像保边滤波之BEEPS滤波算法

目录 1 简介 2 算法原理 3 代码实现 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 简介 BEEPS&#xff08;Bias Elimination in Edge-Preserving Smoothing&#xff09; 是一种基于偏微分方程&#xff08;PDE&#xff09;的边缘保留平滑滤波算法。它能够…...

使用OpenCV和dlib库进行人脸关键点定位

文章目录 引言一、环境准备二、代码实现解析1. 导入必要的库2. 加载图像和人脸检测器3. 加载关键点预测模型4. 检测并绘制关键点5. 显示结果 三、68个关键点的含义四、常见问题解决五、总结 引言 人脸关键点定位是计算机视觉中的一项基础任务&#xff0c;它在人脸识别、表情分…...

Transformer数学推导——Q27 证明时序注意力(Temporal Attention)在视频模型中的帧间依赖建模

该问题归类到Transformer架构问题集——注意力机制——跨模态与多模态。请参考LLM数学推导——Transformer架构问题集。 在视频理解任务中&#xff0c;捕捉帧与帧之间的时间依赖关系&#xff08;如动作的连贯性、物体的运动轨迹&#xff09;是核心挑战。时序注意力&#xff08…...

相机-IMU联合标定:相机标定

文章目录 📚简介💡标定方法🚀标定工具kalibr🚀标定数据录制🚀相机标定📚简介 在 VINS(Visual-Inertial Navigation System,视觉惯性导航系统) 中,相机标定 是确保视觉数据准确性和系统鲁棒性的关键步骤,其核心作用可总结为以下方面: 消除镜头畸变,提升特征…...

sevlet API

sevlet API API就是一组类和方法 HttpServlet 这是写servlet代码用到的核心的类,通过继承这个类,并重写其中的方法,让Tomcat去调用这里的逻辑. init:webapp被加载的时候,执行 destroy:webapp被销毁的时候(Tomcat结束)执行,进行一些收尾工作.但是这个方法不保证能够调用到!!…...

python程序设习题答案

第一章 1&#xff0e;在下列领域中&#xff0c;使用 Python 不可能实现的是( C ) A . Web 应用开发 B &#xff0e;科学计算 C &#xff0e;操作系统管理 D &#xff0e;游戏开发 2.Python程序文件的扩展名是&#xff08; D )。 A.python B.pyt C.pt D.py 3&…...