【js自学打卡9】抛出异常 / 幂计算 / 发布订阅 / map小知识点
1. 抛出异常的写法
抛出一个简单的字符串错误
throw 'Error2'; // 抛出一个字符串
抛出一个Error对象
throw new Error('出错了!');
抛出一个自定义错误对象
function UserError(message) {this.message = message;this.name = "UserError";
}
throw new UserError("这是自定义错误。");
在函数中抛出异常
function divide(a, b) {if (b === 0) {throw new Error("除数不能为0。");}return a / b;
}
try {let result = divide(10, 0);console.log(result);
} catch (e) {console.error(e.message); // 输出 "除数不能为0。"
}
当throw语句执行时,JavaScript会立即停止当前函数的执行并退出。如果没有try...catch语句来捕获这个异常,程序将会中断执行,并且异常会被传递到调用栈的上一层。如果异常在调用栈中没有被捕获,它最终会成为一个未捕获的异常,导致整个程序崩溃。
2.幂计算
使用 Math.pow()
老版本的方式
var base = 2;
var exponent = 3;
var result = Math.pow(base, exponent);
console.log(result); // 输出 8
使用 ** 运算符
新版本支持
let base = 2;
let exponent = 3;
let result = base ** exponent;
console.log(result); // 输出 8
3.发布订阅
在JavaScript中,发布订阅模式(Pub/Sub)是一种设计模式,它允许对象或组件之间进行更松散的耦合,从而提高代码的可维护性和扩展性。这种模式主要由以下两部分组成:
- 发布者(Publisher):负责发布事件(消息)的对象。
- 订阅者(Subscriber):负责订阅感兴趣的事件,并在事件发生时执行相应的操作。
3.1工作原理
- 订阅(Subscribe):订阅者向一个中心调度中心(事件总线或消息队列)注册自己感兴趣的事件。
- 发布(Publish):发布者发布事件到调度中心,调度中心会通知所有订阅了这个事件的订阅者。
- 通知(Notify):调度中心将事件通知给订阅者,订阅者接收到通知后执行相应的处理函数。
3.2应用场景
发布订阅模式在JavaScript中非常常见,以下是几个典型的应用场景:
- 前端事件处理:如浏览器中的事件监听,用户与页面交互时(如点击、滚动等)会触发事件,而这些事件可以被不同的函数订阅和处理。
- 跨组件通信:在复杂的Web应用中,尤其是使用React、Vue、Angular等框架时,不同组件之间可能需要通信。发布订阅模式可以用来在组件之间传递消息,而不需要它们直接相互引用。
- 异步编程:在处理异步操作时,如Ajax请求、定时器、事件循环等,可以使用发布订阅模式来在异步操作完成后通知相关的函数或组件。
- 消息队列:在Node.js中,发布订阅模式常用于实现消息队列,处理各种I/O操作,如读写文件、数据库操作等。
- 插件和模块间的通信:在构建可扩展的应用时,插件或模块之间可能需要相互通信,而发布订阅模式提供了一种解耦的方式来实现这一点。
3.3示例代码
下面是一个简单的发布订阅模式的实现:
class EventEmitter {constructor() {this.events = {};}// 订阅事件on(event, listener) {if (!this.events[event]) {this.events[event] = [];}this.events[event].push(listener);}// 发布事件emit(event, ...args) {if (this.events[event]) {this.events[event].forEach(listener => listener(...args));}}// 移除事件订阅off(event, listenerToRemove) {if (this.events[event]) {this.events[event] = this.events[event].filter(listener => listener !== listenerToRemove);}}
}
// 使用示例
const eventEmitter = new EventEmitter();
// 订阅者A
eventEmitter.on('message', (data) => {console.log('订阅者A收到消息:', data);
});
// 订阅者B
eventEmitter.on('message', (data) => {console.log('订阅者B收到消息:', data);
});
// 发布者发布事件
eventEmitter.emit('message', 'Hello, world!');
在这个示例中,EventEmitter 类实现了一个简单的发布订阅系统,订阅者通过 on 方法订阅事件,发布者通过 emit 方法发布事件。当事件被发布时,所有订阅了该事件的订阅者都会收到通知。
4. map相关方法
has(key):查询是否有某个键。返回boolean
get(key):查询键对应value。
set(key,value):置入键值对
相关文章:
【js自学打卡9】抛出异常 / 幂计算 / 发布订阅 / map小知识点
1. 抛出异常的写法 抛出一个简单的字符串错误 throw Error2; // 抛出一个字符串抛出一个Error对象 throw new Error(出错了!);抛出一个自定义错误对象 function UserError(message) {this.message message;this.name "UserError"; } throw new User…...
ArcGIS Pro SDK (九)几何 7 多点
ArcGIS Pro SDK (九)几何 7 多点 文章目录 ArcGIS Pro SDK (九)几何 7 多点1 构造多点 - 从映射点的枚举2 构造多点 - 使用 MultipointBuilderEx3 修改多点的点4 从多点检索点、2D 坐标、3D 坐标 环境:Visual Studio 2…...
服务器注意事项
1. 远程服务器不允许关机,只能重启; 2. 重启服务器应关闭服务; 3. 不要在服务器访问高峰运行高负载命令; 4. 远程配置防火墙是不要把自己踢出服务器; 5. 制定合理的密码规范并定期更新; 6. 合理分配权…...
学生信息管理系统设计
学生信息管理系统的设计是一个综合性的项目,涉及到数据的存储、检索、更新和删除等基本操作,同时也需要考虑系统的易用性、安全性和扩展性。以下是一些关键步骤和要素,用于指导设计这样一个系统: 1. 需求分析 目标用户ÿ…...
Python求均值,方差,标准差
参考链接:变异系数(Coefficient of Variation,COV)和协方差(Covariance, Cov)-CSDN博客 参考链接:pandas中std和numpy的np.std区别_numpy pandas std-CSDN博客 在计算蛋白质谱数据中的每个蛋白对应的变异…...
DDei在线设计器-HTML渲染
Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上,从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形,从而获得更加丰富的图形展现。 通常情况下,我们创建的图形控件ÿ…...
【React Hooks原理 - useSyncExternalStore】
概述 在React项目中说到状态管理,我们第一时间想到的就是使用useState、useReducer这种Hooks来进行状态管理。但是这种是针对React内部的状态,如果有时候我们需要订阅外部的状态并影响React组件的更新的话,那通过这种内部状态管理API显然不能…...
C++STL初阶(7):list的运用与初步了解
在了解了vector之后,我们只需要简单学习List与vector不一样的接口即可 1.list的基本接口 1.1 iterator list中,与vector最大的区别就是迭代器由随机迭代器变成双向迭代器 string和vector中的迭代器都是随机迭代器,支持-等,而LIS…...
el-menu弹出菜单样式不生效
1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…...
Springboot 3.x - Reactive programming (2)
三、WebFlux Blocking Web vs. Reactive Web Blocking Web (Servlet) and Reactive Web (WebFlux) have significant differences in several aspects. 1. Front Controller Servlet-Blocking Web: Uses DispatcherServlet as the front controller to handle all HTTP req…...
WPF+Mvvm 项目入门完整教程(一)
WPF+Mvvm 入门完整教程一 创建项目MvvmLight框架安装完善整个项目的目录结构创建自定义的字体资源下载更新和使用字体资源创建项目 打开VS2022,点击创建新项目,选择**WPF应用(.NET Framework)** 创建一个名称为 CommonProject_DeskTop 的项目,如下图所示:MvvmLight框架安装…...
[解决方法]git上传的项目markdown文件的图片无法显示
应该有不少初学者会遇到这种情况 以下是本人摸索出的解决方法 我使用的是typora,首先设置typora的图片设置 文件>偏好设置>图像 如下: 选择这个就会在此文件的同级目录下创建一个assets文件夹来存放此markdown文件的所有图片 然后勾选优先使用相…...
【React】使用 antd 加载组件实现 iframe 的加载效果
文章目录 代码实现: import { Spin } from antd; import { useState } from react;export default function () {const [loading, setLoading] useState(true);return (<div style{{ position: relative, height: 100% }}><Spinstyle{{ position: absolu…...
Python爬虫(1) --基础知识
爬虫 爬虫是什么? spider 是一种模仿浏览器上网过程的一种程序,可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…...
云原生系列 - Jenkins
Jenkins Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站(英文):https://www.jenkins.io/ 官方网站(中文):https://www.jenkins.io…...
django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出
使用crontab执行python脚本时,有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说,crontab使用的环境变量是非交互式(non-interactive)环境变量,而终端则使用交互式(inter…...
计算机网络入门 -- 常用网络协议
计算机网络入门 – 常用网络协议 1.分类 1.1 模型回顾 计算机网络细分可以划为七层模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而上三层可以划为应用层中。 1.2 分类 1.2.1 应用层 为用户的应用进程提供网络通信服务࿰…...
【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现
文章目录 属性节点赋值和直接节点赋值的区别体现 属性节点赋值和直接节点赋值的区别体现 创建5个圆形指示灯,然后循环点亮,先给圆形指示灯赋值假变量,然后再进行循环。 运行结果,观察结果,发现刚开始运行时࿰…...
【数据库系列】Parquet 文件介绍
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
A Survey on Multimodal Large Language Models综述
论文题目:A Survey on Multimodal Large Language Models 论文地址:https://arxiv.org/pdf/2306.13549 话题:多模态LLMs综述 MLLMs Paper: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 1. 摘要 近期,以GPT-4V为代表的跨模态大型语言模型(MLLM…...
OpenClaw Memory启动器:快速构建AI记忆系统的开源脚手架
1. 项目概述:一个为AI记忆系统设计的开源启动器最近在折腾AI应用开发,特别是那些需要长期记忆和上下文管理的项目时,发现了一个挺有意思的GitHub仓库:christiancaviedes/openclaw-memory-starter。这本质上是一个为“OpenClaw Mem…...
Cursor编辑器AI操作完成音效插件:原理、实现与效能提升
1. 项目概述:一个提升编码体验的“听觉反馈”工具如果你和我一样,每天有大量时间与代码编辑器为伴,那么你一定对那种“沉浸式”的编码状态又爱又恨。爱的是心流状态下的高效产出,恨的是一旦被打断,重新进入状态需要耗费…...
Windows和Office激活难题?KMS智能激活脚本让你轻松告别烦恼
Windows和Office激活难题?KMS智能激活脚本让你轻松告别烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经因为Windows系统突然弹出激活提示而中断工作?是否遇…...
2.2 本地文件读取
本章学习目标: 知道CSV、Excel、JSON三种文件分别怎么读、会遇到什么常见问题理解每种文件格式的“坑”在哪里,以及如何向AI描述解决方案学会用“人话”告诉AI你要做什么,让AI生成代码不需要记住任何函数名或参数,只需要知道“有什…...
革命性AI图像生成工具Fooocus:让创意触手可及的完整解决方案
革命性AI图像生成工具Fooocus:让创意触手可及的完整解决方案 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus 你是否曾经被复杂的AI绘画工具吓退?Fooocus正是为你打造的解…...
基于RAG与向量数据库的智能知识库构建实战指南
1. 项目概述:一个开源的深度知识库构建与问答引擎最近在折腾一个挺有意思的开源项目,叫deepwiki-open。简单来说,它就是一个帮你把一堆文档(比如公司内部Wiki、产品手册、技术文档)变成一个能“听懂人话”并“对答如流…...
Midjourney v7新功能全维度压测报告(v6 vs v7实测对比:提示词容错率↑47%,构图理解准确率突破92.6%)
更多请点击: https://intelliparadigm.com 第一章:Midjourney v7新功能全面解析 Midjourney v7 于2024年第三季度正式发布,标志着AI图像生成在语义理解、构图控制与跨模态一致性方面迈入新阶段。本次升级不再仅依赖提示词(prompt…...
taotoken的token plan套餐让长期使用的成本预测变得简单
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken 的 Token Plan 套餐让长期使用的成本预测变得简单 对于将大模型 API 深度集成到业务流程中的团队而言,成本管…...
基于GAN的端到端ISP:用AI学习从RAW到RGB的图像处理革命
1. 项目概述:从“拍”到“算”的ISP革命在计算机视觉和图像处理领域,图像信号处理器(ISP)一直扮演着“幕后英雄”的角色。它负责将相机传感器捕捉到的原始、未经处理的RAW Bayer数据,转换为我们手机相册里那些色彩鲜艳…...
云端AI模型基准测试:从参数迷信到效能优先的选型实战
1. 项目概述:一次颠覆认知的云端AI模型基准测试作为一名长期在本地部署AI智能体(我用的是OpenClaw)的实践者,模型选型一直是我工作流中的核心决策。过去几个月,我默认使用的都是阿里云出品的qwen3.5:397b-cloud。这个模…...
