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

js中import引入一个export值可以被修改。vue,react

import引入的数据实际就是数据本身。

如果导出的是一个对象,该对象引入后被更改了,则会影响其他文件引入此对象

解释示例: 

// resources.js
const obj = {}
export {obj}

当在a.js中import引入一个空对象obj,并且新增一个属性obj.a='a' 

// a.js
import { obj } from "./resources.js";
obj.a = 'a'
console.log(obj);  // {a:'a'}

那在b.js中import使用obj时,obj不再是空对象,而是obj为{a:'a'} 

// b.js
import { obj } from "./resources.js";
console.log(obj);  // {a:'a'}

一般情况下都不希望原始数据被更改,那应该怎么办?

解决办法1:冻结对象

// resources.js
const obj = { key: 'value' };
// 冻结对象
Object.freeze(obj);
export { obj };

Object.freeze() 冻结的特性

  1. 不可写:冻结对象的属性不能被修改。
  2. 不可扩展:不能向冻结对象添加新属性。
  3. 不可配置:不能删除冻结对象的属性。
  4. 原型不可变:冻结对象的原型不能被修改。

Object.freeze只能冻结第一层属性,如果需要冻结更深层属性则需要递归

// 递归冻结
function deepFreeze(obj) {// 获取对象的所有属性名const propNames = Object.getOwnPropertyNames(obj);// 遍历所有属性,如果属性值是对象,则递归冻结for (const name of propNames) {const value = obj[name];if (value && typeof value === 'object') {deepFreeze(value);}}// 冻结对象return Object.freeze(obj);
}

判断对象是否被冻结Object.isFrozen()

const obj = { key: 'value' };
// 判断对象是否被冻结
console.log(Object.isFrozen(obj)); // 输出: false// 冻结对象
Object.freeze(obj);
// 再次判断对象是否被冻结
console.log(Object.isFrozen(obj)); // 输出: true

解决办法2:也可以使用和vue原理相同的代理去实现。

如果确实需要更改数据,需要进行深拷贝后再进行操作

// c.js
import { arr } from "./resources.js";
import { cloneDeep } from "lodash-es";
const arrNew = cloneDeep(arr)

相关文章:

js中import引入一个export值可以被修改。vue,react

import引入的数据实际就是数据本身。 如果导出的是一个对象,该对象引入后被更改了,则会影响其他文件引入此对象 解释示例: // resources.js const obj {} export {obj} 当在a.js中import引入一个空对象obj,并且新增一个属性ob…...

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…...

域名解析线路类型有哪几种

在网络世界中,域名解析是将域名转换为IP地址的关键环节,而域名解析线路类型的不同则为域名解析提供了多样化的策略,以满足不同用户和网络环境的需求。以下是几种常见的域名解析线路类型。 电信线路 电信线路解析主要是针对中国电信网络用户…...

Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了

这一篇让我想起来学习 Spring 的时&#xff0c;被 XML 支配的恐惧。明明是写Java&#xff0c;为啥要搞个XML呢&#xff1f;大佬们永远不知道&#xff0c;我认为最难的是 XML 头&#xff0c;但凡 Spring 用 JSON来做配置文件&#xff0c;Java 界都有可能再诞生一个扛把子。 <…...

[运维][Nginx]Nginx学习(2/5)-Nginx高级

Nginx服务器基础配置实例 前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。通过这些指令的合理配置&#xff0c;我们就可以让一台Nginx服务器正常工作&#xff0c;并且提供基本的web服务器功能。 接下来我们将通过一个比较完整和最简单的基础配…...

【快捷入门笔记】mysql基本操作大全-SQL数据库

SQL数据库 一、创建数据库 – 创建一个新数据库 fang_fang CREATE DATABASE fang_fang;– 显示所有数据库以确认创建 SHOW DATABASES;– 使用新数据库fang_fang USE fang_fang;– 检查我们正在使用哪个数据库 SELECT DATABASE();二、 删除数据库 –当你确定数据库存在并…...

【LeetCode】【算法】15. 三数之和

LeetCode 15. 三数之和 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不…...

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼&#xff0c;你准备怎么做&#xff0c;你会将活鱼红烧或将死鱼清蒸吗&#xff1f;好的食材只需要最简单的烹饪&#xff0c;不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点&#xff0c;广域网就是那条死鱼&#xff0c;数据中心则是那条活鱼。…...

JMeter进阶篇

目录 上篇导航&#xff1a; 总目录&#xff1a; 一、逻辑控制器&#xff1a; 1.逻辑控制器和关联&#xff1a; 2.if逻辑控制器&#xff1a; 3.forEach控制器&#xff1a; 4.循环控制器&#xff1a; 二、关联&#xff1a; 1.xpath&#xff1a; 2.正则表达式提取器&…...

LabVIEW编程基础教学(一)--介绍

LabVIEW&#xff08;Laboratory Virtual Instrument Engineering Workbench&#xff09;是一种基于图形化编程的开发环境&#xff0c;专为工程应用、测试、测量、控制系统等设计。与传统的文本编程语言不同&#xff0c;LabVIEW 使用图形化的方式通过“数据流”模型来表示程序逻…...

HVV蓝队基础

免责声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 企业网络架构 企业技术和信…...

[运维][Nginx]Nginx学习(1/5)--Nginx基础

Nginx简介 背景介绍 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】&#xff0c;同时也是一个【POP3/SMTP/IMAP代理服务器】&#xff0c;是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的&#xff0c;Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一…...

创客节小学组C++模拟题

来源:加码未来2024年深圳罗湖区创客节模拟题(小学组) 第一题 题目描述 给你n个数,找出出现次数超过一半的数。题目保证这样的数一定存在。 输入格式 第一行一个整数n,(n<=1000) 第二行n个整数(<1000000) 输出格式 输出一个整数 样例输入 5 1 2 3 3 3 样例输…...

阿里云ECS服务器使用限制及不允许做的事情

阿里云ECS&#xff08;Elastic Compute Service&#xff09;是一种高性能的弹性计算服务&#xff0c;允许用户在云端创建和管理虚拟服务器。尽管ECS提供了强大的功能&#xff0c;但在使用过程中&#xff0c;阿里云有一些限制和不允许的行为。以下是一些主要的使用限制和禁止行为…...

Linux开发讲课49--- Linux 启动过程分析

理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动&#xff0c;似乎可以理解。但内核本身是如何启动的呢&#xff1f;initrd&#xff08;initial ramdisk&#xff09; 和引导程序(bootloader)具有哪些功能&#…...

Java-03

目录 算法 1.小美的因子查询 2.小美的密码 3.小美的数组删除 4.小美和大富翁 知识点 InnoDB中的行级锁是怎么实现的&#xff1f; 介绍一下Java中的IO流 讲讲Java的跨平台原理 COUNT&#xff08;1&#xff09;与COUNT&#xff08;*&#xff09;区别 Redis 为什么要用…...

微积分复习笔记 Calculus Volume 1 - 5.3 The Fundamental Theorem of Calculus

5.3 The Fundamental Theorem of Calculus - Calculus Volume 1 | OpenStax...

c++如何绑定一个类与类内成员的关系

在 C 中&#xff0c;成员函数和成员变量的归属关系&#xff08;即某个成员属于哪个类&#xff09;是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定…...

关于解决使用VMWare内的虚拟机无法识别USB问题小结

目录 前言 0. 查看是不是没有开启USB3.0的支持 1. 检查一下是否禁用了VMWare USB服务 2. 无奈之举 前言 笔者今天帮助一位同志解决了VMWare内的虚拟机不识别挂载设备的办法。这里对笔者使用的排查手段做一个总结。 0. 查看是不是没有开启USB3.0的支持 我们的第一件事情就…...

抢抓5G机遇,AORO A23防爆手机如何直击园区巡检挑战?

矗立在沙漠高原的铁塔&#xff0c;遍布都市的电线网络&#xff0c;远离郊区的海港油田……大型园区对智能巡检提出了新的需求&#xff0c;选择一款智能且高效的巡检设备&#xff0c;以确保园区高效运营&#xff0c;成为了管理者关注的重点。在调研多个智慧园区后&#xff0c;小…...

【Python原生AOT编译终极指南】:2026年CPython 3.15+官方AOT源码级拆解与生产落地避坑清单

第一章&#xff1a;Python原生AOT编译的演进脉络与3.15官方定位Python长期以来以解释执行和字节码&#xff08;.pyc&#xff09;为默认运行范式&#xff0c;AOT&#xff08;Ahead-of-Time&#xff09;编译长期处于社区实验阶段。从Nuitka、Cython到PyO3/Rust绑定&#xff0c;再…...

腾讯云轻量服务器+宝塔面板:新手零代码搭建个人网站的保姆级避坑指南

腾讯云轻量服务器宝塔面板&#xff1a;新手零代码搭建个人网站的保姆级避坑指南 你是否曾经想过拥有一个属于自己的网站&#xff0c;却因为不懂代码和服务器运维而望而却步&#xff1f;现在&#xff0c;即使你没有任何技术背景&#xff0c;也能轻松实现这个梦想。本文将带你一步…...

新手入门指南:基于快马平台构建vmware17交互式安装教学应用

新手入门指南&#xff1a;基于快马平台构建VMware17交互式安装教学应用 作为一个刚接触虚拟化技术的新手&#xff0c;第一次安装VMware Workstation 17时可能会遇到不少困惑。从下载安装包到最终配置完成&#xff0c;整个过程涉及多个步骤&#xff0c;每个环节都可能出现各种问…...

**跨平台开发新范式:Flutter + Dart实战构建高性能多端应用**在移动与桌面融

跨平台开发新范式&#xff1a;Flutter Dart 实战构建高性能多端应用 在移动与桌面融合加速的今天&#xff0c;跨平台开发早已不是“妥协”的代名词&#xff0c;而是开发者提升效率、降低维护成本的核心策略。本文将带你深入 Flutter Dart 的实战体系&#xff0c;通过真实项目…...

Java程序员的云原生时代生存指南:面向软件测试从业者的专业视角

在技术浪潮的冲击下&#xff0c;云原生已从概念演进为产业标准。对于广大Java程序员而言&#xff0c;这既是挑战也是机遇。传统的技术栈和开发模式正在经历深刻变革&#xff0c;而软件测试作为保障质量的关键环节&#xff0c;其理念与实践也随之迭代。 一、 挑战审视&#xff…...

手把手教你用llama.cpp在树莓派上跑大模型(附完整配置流程)

在树莓派上部署llama.cpp的完整实践指南 树莓派作为一款价格亲民且功能强大的微型计算机&#xff0c;近年来在边缘计算和嵌入式AI领域崭露头角。本文将详细介绍如何在树莓派上部署llama.cpp这一轻量级大语言模型推理框架&#xff0c;让开发者能够在资源受限的环境中体验前沿AI技…...

【若依】框架:从零构建前后端分离项目实战

1. 环境准备与项目初始化 第一次接触若依框架时&#xff0c;我被它"开箱即用"的特性惊艳到了。这个基于Spring Boot的权限管理系统&#xff0c;前后端分离架构设计得非常清晰。下面我会手把手带你完成环境搭建&#xff0c;过程中遇到的坑也会一并说明。 开发环境需要…...

感知损失(Perceptual Loss)在图像风格迁移中的关键作用与实现

1. 为什么感知损失能让AI画出更像艺术家的画&#xff1f; 第一次用传统MSE损失做风格迁移时&#xff0c;我盯着生成的"梵高星空"直挠头——颜色位置都对&#xff0c;但怎么看都像小学生涂鸦。直到尝试了感知损失&#xff0c;画面突然有了笔触的韵律感。这背后的秘密…...

告别‘千人千脑’:用DMMR模型搞定EEG情感识别的跨被试难题(附PyTorch代码)

突破脑电情感识别的个体差异壁垒&#xff1a;DMMR模型实战指南与PyTorch实现 当你在实验室里看着屏幕上跳动的脑电波形时&#xff0c;是否曾为不同受试者数据间的巨大差异而头疼&#xff1f;这种被称为"脑电指纹"的个体特异性&#xff0c;一直是情感识别领域最棘手的…...

Qwen-Edit-2509多角度切换技术:如何用单张图片生成全视角内容?

Qwen-Edit-2509多角度切换技术&#xff1a;如何用单张图片生成全视角内容&#xff1f; 【免费下载链接】Qwen-Edit-2509-Multiple-angles 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Qwen-Edit-2509-Multiple-angles 在视觉创作领域&#xff0c;你是否曾为拍…...