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

如何解决 JavaScript 中的数组方法不生效?

在 JavaScript 中,数组方法是常用的工具,可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。

然而,有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因可能多种多样,下面我们将逐步分析常见原因,并结合实际项目代码示例进行讲解。

目录结构

  1. 常见的 JavaScript 数组方法
  2. 数组方法不生效的常见原因
  3. 实际项目代码示例
  4. 小结

常见的 JavaScript 数组方法

JavaScript 数组有很多内置的方法,可以简化开发过程。以下是一些常见的数组方法:

1. push() - 向数组末尾添加一个或多个元素

let arr = [1, 2, 3];
arr.push(4);  // arr = [1, 2, 3, 4]

2. pop() - 删除数组末尾的一个元素

let arr = [1, 2, 3];
arr.pop();  // arr = [1, 2]

3. shift() - 删除数组开头的一个元素

let arr = [1, 2, 3];
arr.shift();  // arr = [2, 3]

4. unshift() - 向数组开头添加一个或多个元素

let arr = [1, 2, 3];
arr.unshift(0);  // arr = [0, 1, 2, 3]

5. map() - 创建一个新数组,数组中的每个元素是通过调用提供的函数处理原数组中的每个元素得到的

let arr = [1, 2, 3];
let newArr = arr.map(x => x * 2);  // newArr = [2, 4, 6]

6. filter() - 创建一个新数组,包含所有通过测试的元素

let arr = [1, 2, 3, 4];
let evenArr = arr.filter(x => x % 2 === 0);  // evenArr = [2, 4]

7. reduce() - 使用一个函数对数组中的每个元素进行累加(或其他操作)

let arr = [1, 2, 3];
let sum = arr.reduce((acc, val) => acc + val, 0);  // sum = 6

数组方法不生效的常见原因

在实际开发中,遇到数组方法不生效的问题,可能是以下几个原因:

1. 数组未定义或为空

有时数组可能是 undefinednull,调用数组方法时会报错。确保数组已正确定义并初始化。

let arr;  // arr 是 undefined
arr.push(1);  // 报错:Cannot read property 'push' of undefinedlet arr = null;  // arr 是 null
arr.push(1);  // 报错:Cannot read property 'push' of null

2. 数组方法改变了原数组,但未捕获新值

有些数组方法是 原地修改数组 的,例如 push()pop()shift() 等。如果你希望捕获修改后的新数组,请记住数组本身会发生改变。

let arr = [1, 2, 3];
arr.push(4);  // arr 被修改为 [1, 2, 3, 4]

但有些方法如 map()filter()reduce() 等会返回一个新的数组,如果你没有正确接收这个新数组,可能会认为“方法不生效”。

let arr = [1, 2, 3];
arr.map(x => x * 2);  // 返回一个新数组 [2, 4, 6], 但原数组没有变化
console.log(arr);  // [1, 2, 3]

3. 数组方法调用错误的上下文

有些方法依赖于数组的上下文(this),如果你在调用这些方法时改变了上下文,可能会导致方法不按预期工作。

例如,forEach() 方法会依赖 this,如果你改变了 this 的值,可能会导致不生效。

let arr = [1, 2, 3];
arr.forEach(function (item) {console.log(this);  // this 会依赖于方法调用的上下文
});

4. 循环中修改数组导致问题

如果在使用数组方法时(如 map(), filter())修改了数组本身(如删除或添加元素),可能会导致意外的行为。

let arr = [1, 2, 3, 4];
arr.filter((x, i) => {arr.pop();  // 在 filter 中修改原数组return x % 2 === 0;
});
console.log(arr);  // [1, 2, 3],结果不符合预期

5. 不正确的数据类型

数组方法通常只能应用于数组,如果你错误地对非数组对象(如对象或字符串)调用了数组方法,会导致方法不起作用。

let str = "Hello";
str.push("!");  // 报错:str.push is not a function,因为字符串没有 push 方法

实际项目代码示例

假设我们正在开发一个用户信息管理系统,其中我们需要处理用户数据列表。在这个系统中,我们会遇到一些常见的数组方法问题。

示例 1:数组方法未生效

假设我们要对一个用户数组进行操作,使用 map() 方法转换数组中的用户名为大写字母。但程序执行后发现数组没有变化。

let users = [{ name: "alice", age: 25 },{ name: "bob", age: 30 },{ name: "charlie", age: 35 }
];users.map(user => {user.name = user.name.toUpperCase();
});console.log(users);
// 输出:
// [ { name: 'alice', age: 25 },
//   { name: 'bob', age: 30 },
//   { name: 'charlie', age: 35 } ]

问题分析:

  • 在上面的代码中,我们错误地认为 map() 方法会改变原数组 users。但实际上,map() 方法返回了一个新数组,而原数组没有发生变化。
  • 解决方法:应该直接修改 users 中的每个元素,或者使用 map() 返回一个新数组。
// 解决方案1:直接修改原数组
users.forEach(user => {user.name = user.name.toUpperCase();
});// 解决方案2:使用 map 返回新数组
let newUsers = users.map(user => ({...user,name: user.name.toUpperCase()
}));console.log(newUsers);  // 新数组会变化,原数组不变

示例 2:数组方法导致意外结果

在开发过程中,可能在 map()filter() 中修改原数组,导致不符合预期的结果。

let numbers = [1, 2, 3, 4, 5];
let result = numbers.filter(num => {if (num === 3) numbers.pop();  // 修改原数组return num % 2 === 0;
});console.log(result);  // [2, 4]
console.log(numbers); // [1, 2, 4, 5] - 数组被修改

问题分析:

  • filter() 在执行过程中修改了原数组,导致返回的结果不符合预期。最好避免在循环中修改原数组。
  • 解决方法:在过滤前不要修改原数组,或者使用 map()filter() 前创建副本。
let numbersCopy = [...numbers];
let result = numbersCopy.filter(num => num % 2 === 0);

小结

JavaScript 中的数组方法是非常强大的工具,但在使用时有时会遇到“方法不生效”的问题。常见的原因包括数组未定义、上下文错误、修改原数组导致副作用等。要解决这些问题,可以采取以下方法:

  1. 确保数组已经定义且非空。
  2. 注意理解方法的行为(如 map() 返回新数组,push() 会改变原数组)。
  3. 避免在方法中修改原数组,特别是在使用 map()filter() 时。
  4. 留意方法调用时的上下文(this)问题。

通过这些实践和注意事项,能够

相关文章:

如何解决 JavaScript 中的数组方法不生效?

在 JavaScript 中,数组方法是常用的工具,可以用来对数组进行操作。常见的数组方法包括 push(), pop(), shift(), unshift(), map(), filter(), reduce() 等。 然而,有时候我们会遇到数组方法“失效”或者不按预期工作的情况。这个问题的原因…...

道可云人工智能元宇宙每日资讯|全国工商联人工智能委员会成立会议在南京举办

道可云元宇宙每日简报(2024年12月5日)讯,今日元宇宙新鲜事有: 全国工商联人工智能委员会成立会议在南京举办 全国工商联人工智能委员会成立会议日前在江苏省南京市举办。中央统战部副部长、全国工商联党组书记沈莹出席会议并讲话…...

华为HCIP-Datacom H12-821H12-831 (12月最新题库)

备考HCIP-datacom的小伙伴注意啦 !!! 2024年下半年12月份最新(H12-821和H12-831)题库带解析,有需要的小伙伴移动至文章末 H12-821: H12-831: 1.BGP 邻居建立过程的状态存在以下几种:那么建立一个成功的连接所经历的状态机顺序是 A、3-1-2-5-4 B、1-3-5-2-4 C、…...

模型案例:| 手机识别模型!

导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…...

AWS创建ec2实例并连接成功

aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...

短视频矩阵系统开发|技术源代码部署

短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能,助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具,它整合了多账号管理、视频智能分发、数据可视化等多种功能,为企业在短视频领域的发展提供了强大…...

C# GDI绘制的小熊进度条

C# GDI小熊进度条 1、添加自定义控件winform using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...

java书 核心技术+卷一+4

5.4 对象包装器与自动装箱 package 反射; import java.util.AbstractList; import java.util.ArrayList; public class test {public static void main(String[] args) {int a10;ArrayList<Integer> xxnew ArrayList<>();xx.add(a); //自动装箱int bxx.get(0);//…...

用Python开发一个经典打砖块小游戏

Python 的 pygame 库让我们可以轻松开发经典的小游戏。今天,我们将实现一个“打砖块”小游戏,带你体验游戏开发的乐趣。 一、游戏设计 1.1 游戏规则 玩家通过移动滑板接住弹起的球。球撞击砖块会让砖块消失,玩家得分。如果球落地,游戏失败。1.2 技术点 碰撞检测:检测球与…...

RTCMultiConnection 跨域问题解决

js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法&#xff1a; 解决写法&#xff1a; // 喜欢组合语法的自己组 const io new ioServer.S…...

使用GO--Swagger生成文档

概述 在前后端分离的项目中&#xff0c;后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包&#xff0c;用于处理Swagger 2.0&#xff08;即OpenAPI 2.0&#xff09;规范。它提供了丰富的工具集&#x…...

简易图书管理系统

javawebjspservlet 实体类 package com.ghx.entity;/*** author &#xff1a;guo* date &#xff1a;Created in 2024/12/6 10:13* description&#xff1a;* modified By&#xff1a;* version:*/ public class Book {private int id;private String name;private double pri…...

探索自然语言处理奥秘(NLP)

摘要 自然语言处理&#xff08;NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音&#xff0c;并与人类进行基本的对话交流。 通俗理解 自然语言处理&#xff08;NLP&#xff09…...

刘铁猛C#入门 030 泛型,partial类,枚举,结构

泛型(generic)无处不在 为什么需要泛型&#xff1a;避免成员膨胀或者类型膨胀 正交性&#xff1a;泛型类型(类/接口/委托/......)泛型成员(属性/方法/字段/....类型方法的参数推断 泛型接口/类的 类型参数不只有一个泛型与委托、lambda表达式实现泛型接口类时 &#xff0c;实现…...

迅雷 11.2.2 | 本地会员版,不限速下载,支持云盘

迅雷 v11.2.2 是一款带网盘功能的绿色版下载工具。双击“!)绿化”文件即可在桌面生成快捷图标。该版本干净简洁&#xff0c;仅保留下载和云盘两项核心功能。点击左上角的【新建】按钮&#xff0c;可新建链接下载任务。即使在网络条件一般的情况下&#xff08;如50M宽带&#xf…...

P3131 [USACO16JAN] Subsequences Summing to Sevens S

题目描述 Farmer Johns NN cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to take a photo of a contiguous group of cows but, due to a…...

股指期货基差为正数,这是啥意思?

在股指期货的世界里&#xff0c;有个挺重要的概念叫“基差”。说白了&#xff0c;基差就是股指期货的价格和它对应的现货价格之间的差价。今天&#xff0c;咱们就来聊聊当这个基差为正数时&#xff0c;到底意味着啥。 基差是啥&#xff1f; 先复习一下&#xff0c;基差 股指…...

docker自动拉取最新镜像并更新

目录 一、自动检查和更新所有正在运行的容器&#xff08;每24h一次&#xff09; 二、仅仅更新特定的容器&#xff08;每24h一次&#xff09; 三、指定更新间隔&#xff08;300秒&#xff09; 四、Watchtower 不会主动删除旧镜像&#xff0c;使用 --cleanup 参数在更新容器后…...

unicloud微信小程序云端一体项目DEMO

最近应客户需求&#xff0c;做了一个产品展示的云开发小程序&#xff0c;从了解云开发到应用到实际项目的产品demo&#xff0c;希望大家能从中获取到对自己有用的东西。 说下心得体会吧&#xff0c;一般小项目用这种云开发确实会减少很多开发成本&#xff0c;人力成本&#xf…...

Spring+Mybatis 整合所需准备

文章目录 SpringMybatis SpringMybatis 准备pom.xml 项目所需jar文件 <spring.version>4.0.2.RELEASE</spring.version> <!-- spring框架包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</a…...

后端工程师成长路线图

‌后端开发工程师是软件开发领域中的一个重要角色&#xff0c;主要负责平台设计、接口设计和功能实现。他们的主要职责包括服务器端业务开发、架构设计、系统性能调优等。‌ 后端开发工程师的工作内容通常涉及服务器开发、数据库管理、业务逻辑实现等方面。他们需要与前端工程…...

java -jar ./target/pay.war ./target/pay.war 中没有主清单属 为什么?

当你尝试使用 java -jar ./target/pay.war 来启动你的 WAR 包时&#xff0c;遇到的错误是因为该 WAR 包没有包含主清单属性&#xff08;Main-Class&#xff09;。这是因为你的项目是一个 Spring Boot 项目&#xff0c;并且默认是作为 WAR 文件部署到外部容器&#xff08;如 Tom…...

封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目

在当今学术研究中&#xff0c;科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增&#xff0c;科研人员需要快速消化新知识&#xff0c;筛选相关信息并清晰表达。但论文写作不仅是信息的罗列&#xff0c;还需要条理清晰、逻辑严密、语言精准&#xff0c;特别是在竞争激烈的…...

解决Centos6.9的yum的失效问题

相信大家&#xff0c;如果遇到了yum问题的话&#xff0c;经常会很头疼&#xff0c;因此&#xff0c;这里给出了两条命令&#xff0c;这里的前提是你的wget是能用的 1、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2、wget -O /etc/yum.re…...

【日常记录-Java】查看Maven本地仓库的位置

1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项&#xff0c;如jar包、pom文件等。默认情况下&#xff0c;其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…...

软件测试丨Web自动化测试用例录制与编写全攻略

Web自动化测试的功能简介 Web自动化测试主要是使用特定的工具或框架自动执行对Web应用程序进行的测试。通过模拟用户的操作&#xff0c;自动化测试能够验证应用程序的功能及性能。这一过程的大致流程是&#xff1a; 用例设计&#xff1a;明确测试目标、场景及所需功能。录制测…...

.Net学习

1 什么是.NET Core .NET是开发平台&#xff0c;.NET Framework、.NET Core、Xamaarin/Mono的统称。 .NET Framework是只能在Windows上开发的技术 .NET Core是可以跨平台开发的技术 Xamaarin/Mono是移动端开发的技术 .NET Core&#xff1a;跨平台、免费、开源&#xff0c;可…...

2024年华中杯数学建模A题太阳能路灯光伏板的朝向设计问题解题全过程文档及程序

2024年华中杯数学建模 A题 太阳能路灯光伏板的朝向设计问题 原题再现 太阳能路灯由太阳能电池板组件部分&#xff08;包括支架&#xff09;、LED灯头、控制箱&#xff08;包含控制器、蓄电池&#xff09;、市电辅助器和灯杆几部分构成。太阳能电池板通过支架固定在灯杆上端。…...

Spring Cloud Zookeeper 快速入门demo

1.什么是Spring Cloud Zookeeper &#xff1f; Spring Cloud Zookeeper 是一个用于构建分布式系统的工具&#xff0c;它利用 Apache Zookeeper 提供的服务来实现服务注册与发现、配置管理、负载均衡等功能。具体来说&#xff0c;Spring Cloud Zookeeper 可以做以下几件事情&am…...

防火墙有什么作用

防火墙的作用&#xff1a;1. 提供网络安全防护&#xff1b;2. 实施访问控制和流量过滤&#xff1b;3. 检测和阻止恶意攻击&#xff1b;4. 保护内部网络免受未经授权的访问&#xff1b;5. 监控网络流量和安全事件&#xff1b;6. 支持虚拟专用网络&#xff08;VPN&#xff09;。防…...

使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数

使用aspx&#xff0c;完成一个转发http的post请求功能的api接口&#xff0c;url中增加目标地址参数&#xff0c;传递自定义header参数 首先&#xff0c;简单实现一下&#xff0c;如何在ASPX页面中实现这个功能实现代码说明&#xff1a;注意事项&#xff1a; 然后进阶&#xff0…...

ES使用script进行复杂排序

es数据字段&#xff0c;关注_source内容&#xff0c;为自定义的es表字段内容 {"clerk_id": 3150036230,"clerk_follow_status": 60,"create_time": 1729156110000,"channel": 1,"mid": 1538020071,"binlog_timestamp&…...

大数据技术Kafka详解 ② | Kafka基础与架构介绍

目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…...

观察者模式的理解和实践

引言 在软件开发中&#xff0c;设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式&#xff08;Observer Pattern&#xff09;是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系&#xff0c;使得当一个对象的状态发…...

Web3.0:连接分布式未来的纽带

随着技术的不断进步&#xff0c;Web3.0正逐渐成为人们关注的焦点。作为Web的下一代&#xff0c;Web3.0将引领我们进入一个全新的数字时代&#xff0c;重新定义了我们与互联网的关系 Web3.0&#xff0c;也称为“分布式Web”&#xff0c;是互联网的下一代演进。它不仅是信息的传…...

鸿蒙Next通过oss上传照片到阿里云

前言 最近在写纯血鸿蒙的APP&#xff0c;需要用到oss上传照片&#xff0c;之前的客户端 Android 和 IOS 都已经实现了&#xff0c;获取的阿里云签名的上传地址是服务端实现的&#xff0c;相信大部分公司都是这样的模式&#xff0c;服务端也是调用阿里云的SDK来实现的&#xff…...

微信小程序实现图片拖拽调换位置效果 -- 开箱即用

在编写类似发布朋友圈功能的功能时&#xff0c;需要实现图片的拖拽排序&#xff0c;删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码&#xff0c;可以在威信中搜索&#xff1a;我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…...

Django异步视图adrf解决办法

提问 在Django编写异步视图的时候会出现 AssertionError: Expected a Response, HttpResponse or HttpStreamingResponse to be returned from the view 或者 TypeError: sync_to_async can only be applied to sync functions. 诸如此类的错误的时候一般发生在异步视图中…...

C++:类和对象(2)

1. 类的默认成员函数&#xff1a; 类的默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数&#xff08;构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&a…...

.NET用C#导入Excel数据到数据库

将Excel文件中的数据导入到数据库中不仅能够提升数据处理的效率和准确性&#xff0c;还能极大地促进数据分析和决策制定的过程。尤其在企业级应用中&#xff0c;Excel作为数据输入和初步整理的工具非常普遍&#xff0c;但其功能对于复杂查询、大规模数据管理和跨部门的数据共享…...

市场上显卡型号需求分析

两个平台统计&#xff1a;&#xff08;关键词统计&#xff0c;仅做参考&#xff09; GPU型号&#xff5c;平台 github(提交量/万) huggingface&#xff08;模型量/个&#xff09; H100 6.6 210 A100 17.2 483 V100 14.4 484 4090 27.3 31 3090 11.1 92 在git…...

IO模型分类

IO模型分类 简单了解 阻塞I/O 当用户程序执行read&#xff0c;线程被阻塞&#xff0c;等待两个过程&#xff0c;内核数据准备好和数据从内核态拷贝到用户态。read才返回 非阻塞I/O 非阻塞的read请求在还没准备好数据就返回&#xff0c;期间程序不断轮询内核直到数据准备完…...

使用API有效率地管理Dynadot域名,查看域名优惠信息

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…...

QT 中 QMessageBox 的简单用法

效果 思路 // 创建一个question弹出对话框&#xff0c;添加两个按钮&#xff1a;Yes和NoQMessageBox *box new QMessageBox(QMessageBox::Question, "提示", "确认删除的信息吗&#xff1f;", QMessageBox::Yes | QMessageBox::No, this);box->button(…...

2024-12-6-sklearn学习(4) 支持向量机 吴楚东南坼,乾坤日夜浮。

文章目录 sklearn学习(4) 支持向量机4.1 分类4.1.1 多元分类4.1.2 得分和概率4.1.3 非均衡问题 4.2 回归4.3 密度估计, 异常&#xff08;novelty&#xff09;检测4.4 复杂度4.5 使用诀窍(Tips on Practical Use)4.6 核函数4.6.1 自定义核4.6.1.1 使用 python 函数作为内核4.6.1…...

Linux 正确关机方式详解

在Linux系统中&#xff0c;正确地关机是一个重要的操作&#xff0c;它不仅影响到系统的数据完整性&#xff0c;还可能影响到其他用户的工作。本文将详细介绍Linux系统中的各种关机方式&#xff0c;包括它们的使用场景和具体命令。 为什么需要正确关机 在DOS和Windows系统中&a…...

React Portals 有什么用

React Portals是React提供的一种机制&#xff0c;它允许开发者将组件渲染到DOM树中的不同位置&#xff0c;而不受组件层次结构的限制。React Portals的主要用途和优势包括以下几个方面&#xff1a; 用途和优势 处理全局UI元素 React Portals允许将UI元素渲染到应用的根DOM之外…...

光学偏振的基础知识

前言与目录 XXX 目录 一、 二、 三、 一、总结 光的偏振 光具有三个基本特性&#xff0c;即波长、强度和偏振。光的波长很容易理解&#xff0c;以常见的可见光为例&#xff0c;波长范围为380~780nm。光的强度也很容易理解&#xff0c;一束光的强弱可以通过功率的大小来表征…...

小程序 - 计算器

小程序交互练习 - 计算器小程序 目录 计算器 功能描述 准备工作 创建项目 配置导航栏 创建utils目录 math.js文件内容 calc.js文件内容 页面内容 页面样式内容 页面脚本事件 功能截图 总结 计算器 在日常生活中&#xff0c;计算器是人们广泛使用的工具&#xff0…...

软件架构:从传统单体到现代微服务的技术演变

1.引言 在软件开发中&#xff0c;架构设计不仅仅是程序员的技术任务&#xff0c;它更是一个项目成功的关键。无论是小型应用还是大型分布式系统&#xff0c;软件架构都直接影响着系统的可维护性、可扩展性、性能和稳定性。理解软件架构的必要性&#xff0c;能够帮助开发人员做…...