TypeError: Cannot assign to read only property ‘xxx‘ of object ‘#<Object>‘

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 问题描述
    • 原因分析
    • 解决方案
      • 1. 使用 `Object.freeze()` 的替代方案
      • 2. 使用 `readonly` 关键字
      • 3. 避免修改全局对象的只读属性
    • 实战案例
    • 总结

问题描述

在JavaScript开发过程中,开发者经常会遇到 TypeError: Cannot assign to read only property 'xxx' of object '#<Object>' 的错误提示。该错误通常表示在尝试修改一个只读属性时发生的语法错误。

原因分析

  1. 使用 Object.freeze() 方法

    • Object.freeze() 方法会冻结一个对象,使其不可扩展,并且其所有现有属性都变得不可配置(即不能删除,也不能修改其属性描述符,包括 writable 属性)。
  2. 使用 readonly 关键字(ES2020)

    • 在ES2020中,引入了 readonly 关键字,用于声明只读属性。一旦属性被标记为 readonly,其值就不能被重新赋值。
  3. 全局对象的只读属性

    • 尝试修改全局对象(如 window 对象)上的只读属性也会导致该错误。这些属性通常在严格模式下被冻结。

解决方案

1. 使用 Object.freeze() 的替代方案

如果不需要完全冻结对象,可以考虑使用 Object.seal() 或仅冻结需要冻结的属性。

const obj = {name: "Alice",age: 30
};// 使用 Object.seal() 冻结对象
Object.seal(obj);// obj.name = "Bob"; // 这将抛出 TypeError: Cannot assign to read only property 'name' of object

2. 使用 readonly 关键字

在ES2020及以后的版本中,可以使用 readonly 关键字来声明只读属性。

const obj = {get name() {return "Alice";}
};// obj.name = "Bob"; // 这将抛出 TypeError: Cannot assign to read only property 'name' of object

3. 避免修改全局对象的只读属性

在使用全局对象时,确保这些属性不是只读的。如果必须修改,可以考虑不使用全局对象或重新设计代码结构。

// 避免直接修改 window 对象的属性
// window.readOnlyProperty = "new value"; // 这将抛出 TypeError

实战案例

假设有一个对象被 Object.freeze() 冻结:

const obj = Object.freeze({ name: "Alice" });
obj.name = "Bob"; // 抛出 TypeError: Cannot assign to read only property 'name' of object

解决方案是移除 Object.freeze()

const obj = { name: "Alice" };
obj.name = "Bob"; // 正确

总结

TypeError: Cannot assign to read only property 'xxx' of object '#<Object>' 错误通常是由于尝试修改一个被冻结或标记为只读的对象属性引起的。通过以下方法可以有效避免该问题:

  1. 使用 Object.freeze() 的替代方案:如 Object.seal() 或仅冻结需要冻结的属性。
  2. 使用 readonly 关键字:在ES2020及以后的版本中,使用 readonly 关键字声明只读属性。
  3. 避免修改全局对象的只读属性:确保全局对象属性不是只读的,或在严格模式下谨慎使用。

通过这些方法,开发者可以提高代码的健壮性,减少运行时错误,提升应用的稳定性和用户体验。建议开发者定期检查和测试代码,确保所有对象属性的可修改状态符合预期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29694.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL-数据类型】数据类型分类+数值类型+文本、二进制类型+String类型

一、数据类型分类 二、数值类型 1.bit类型 测试环境ubuntu 基本语法&#xff1a; bit[(M)]&#xff1a;位字段类型&#xff0c;M表示每个值的位数&#xff0c;范围从1&#xff5e;64&#xff1b;如果M被忽略&#xff0c;默认为1举例&#xff1a; create table testBit(id i…

python-leetcode-统计构造好字符串的方案数

2466. 统计构造好字符串的方案数 - 力扣&#xff08;LeetCode&#xff09; 这个问题可以用**动态规划&#xff08;DP&#xff09;**来解决&#xff0c;思路如下&#xff1a; 思路 1. 定义 DP 数组 设 dp[i] 表示长度为 i 的好字符串的个数。 2. 状态转移方程 我们可以在 dp…

Java为什么是跨平台的

一、Java虚拟机(JVM)的抽象层作用 JVAM是Java跨平台的核心技术。Java代码编译后生成字节码(.class文件)&#xff0c;这些字节码并非直接由操作系统执行&#xff0c;而是由JVM解释或编译为特定平台的机器码。 屏蔽底层差异:JVM为不同操作系统提供统一的运行时环境&#xff0c;开…

RuleOS:区块链开发的“破局者”,开启Web3新纪元

RuleOS&#xff1a;区块链开发的“破冰船”&#xff0c;驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中&#xff0c;一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”&#xff0c;冲破传统开发的冰层&#xff0c;驶向Web3的星辰大海。这艘船&#xff0c;正以一种前所未有的姿…

python: DDD+ORM using oracle 21c

sql script: create table GEOVINDU.School --創建表 ( SchoolId char(5) NOT NULL, -- SchoolName nvarchar2(500) NOT NULL, SchoolTelNo varchar(8) NULL, PRIMARY KEY (SchoolId) --#主鍵 );create table GEOVINDU.Teacher ( TeacherId char(5) NOT NULL , TeacherFirstNa…

软考中级_【软件设计师】知识点之【数据库】

一、结构数据模型 结构数据模型是直接面向数据库的逻辑结构包括&#xff1a; 层次模型、网状模型、关系模型&#xff08;主要学习&#xff09;、面向对象模型层次模型&#xff1a; 是一个树结构一对多 网状模型&#xff1a; 是图结构多对多 关系模型 是一种二维表格结构 例如&…

【UCB CS 61B SP24】 Lecture 25 26 - Minimum Spanning Trees Directed Acyclic Graphs 学习笔记

本文首先介绍了图论中的另一个经典问题&#xff1a;最小生成树&#xff08;MST&#xff09;&#xff0c;讲解并用 Java 实现了用于求解 MST 的两个经典算法 Prim 与 Kruskal&#xff1b;接着介绍并实现了有向无环图&#xff08;DAG&#xff09;与拓扑排序。 1. 最小生成树 1.…

Java源码:利用jdk的spi载入其他厂商Driver实现源码分析

Java源码&#xff1a;利用jdk的spi载入其他厂商Driver实现源码分析 前言&#xff1a;一、Java中的类加载器类型二、类加载器的作用时机三、类加载的过程四、引导类加载器&#xff1a;一、定义与职责二、实现方式三、加载过程与特性四、与其他类加载器的关系五、作用与意义 隐式…

可视化+图解:轻松搞定链表

链表&#xff08;Linked list&#xff09;是一种常用的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据域和指针域。指针域存储了下一个节点的地址&#xff0c;从而建立起各节点之间的线性关系。 1、链表节点 1.1 节点构成 链表节点如下图所示&#xff…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中&#xff0c;动画是提升用户体验的关键要素。通过巧妙运用动画&#xff0c;我们能让应用界面更加生动、交互更加流畅&#xff0c;从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

C# 在Excel中插入和操作切片器-详解

目录 使用工具 C# 在Excel中插入切片器 插入切片器到透视表 插入切片器到表格 C# 在Excel中修改切片器 C# 删除Excel中的切片器 切片器&#xff08;Slicer&#xff09;是Excel中的一个强大工具&#xff0c;它提供了直观且交互式的方式来过滤数据。通过切片器&#xff0c;…

【Python修仙编程】(二) Python3灵源初探(7)

字典的修炼——修仙者的法宝库 师傅玄天真人在他面前摊开一本泛黄的法典&#xff0c;上面写着&#xff1a;“字典是修仙者存储法宝的仓库&#xff0c;能让你快速找到需要的宝贝。” “师傅&#xff0c;字典是啥玩意儿&#xff1f;”林羽挠挠头&#xff0c;一脸懵逼。 “字典…

SyntaxError: Illegal return statement

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249&#xff0c; webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间&#xff0c;下面介绍下如何修改配置这个区间。 从页面上修改这个区间&#xff0c;端口区间尽量设置大…

饮食 “巧调理”,缓解手抖有妙方

手抖&#xff0c;这一常见症状背后可能潜藏多种原因&#xff0c;无论是生理性紧张所致&#xff0c;还是病理性疾病引发&#xff0c;合理饮食都对缓解症状有积极意义。健康饮食能够为身体提供必要营养&#xff0c;助力神经系统稳定&#xff0c;从而在一定程度上改善手抖状况。 在…

利用 requestrepo 工具验证 XML外部实体注入漏洞

1. 前言 在数字化浪潮席卷的当下&#xff0c;网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时&#xff0c;也可能暗藏安全风险。XXE&#xff08;XML外部实体&#xff09;漏洞作为其中的典型代表&#xff0c;攻击者一旦利用它&#xff0c;便能窃取敏感信息、掌控服务…

考前冲刺,消防设施操作员考试最后一击

考前冲刺&#xff0c;消防设施操作员考试最后一击 考前冲刺阶段至关重要。首先要回归教材&#xff0c;快速浏览重点知识点&#xff0c;强化记忆。同时&#xff0c;对之前做过的错题进行集中复习&#xff0c;分析错误原因&#xff0c;避免在考试中再次犯错。进行全真模拟考试&a…

【javaEE】多线程(基础)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【江科大STM32】TIM输入捕获模式PWMI模式测频率

一、输入捕获测频率 接线图&#xff1a; 测信号的输入引脚为PA6&#xff0c;信号从PA6进来&#xff0c;待测的PWM信号也是STM32自己生成的&#xff0c;输出引脚是PA0&#xff0c;所以接线这里直接用一根线将PA0引到PA6就可以了。 如果有信号发生器的话&#xff0c;也可以设置成…

第10章 metasploit(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的&#xff0c;已经过去3年时间了&#xff0c;最近利用闲暇时间&#xff0c;抓紧吸收&#xff0c;总的来说&#xff0c;第10章开始学习利用metasploit渗透测试工具去打metasploit2虚拟机&#xff0c;本文我演示了metasploit端口扫描和…