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

【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)是一种设计模式,它允许对象或组件之间进行更松散的耦合,从而提高代码的可维护性和扩展性。这种模式主要由以下两部分组成:

  1. 发布者(Publisher):负责发布事件(消息)的对象。
  2. 订阅者(Subscriber):负责订阅感兴趣的事件,并在事件发生时执行相应的操作。

3.1工作原理

  • 订阅(Subscribe):订阅者向一个中心调度中心(事件总线或消息队列)注册自己感兴趣的事件。
  • 发布(Publish):发布者发布事件到调度中心,调度中心会通知所有订阅了这个事件的订阅者。
  • 通知(Notify):调度中心将事件通知给订阅者,订阅者接收到通知后执行相应的处理函数。

3.2应用场景

发布订阅模式在JavaScript中非常常见,以下是几个典型的应用场景:

  1. 前端事件处理:如浏览器中的事件监听,用户与页面交互时(如点击、滚动等)会触发事件,而这些事件可以被不同的函数订阅和处理。
  2. 跨组件通信:在复杂的Web应用中,尤其是使用React、Vue、Angular等框架时,不同组件之间可能需要通信。发布订阅模式可以用来在组件之间传递消息,而不需要它们直接相互引用。
  3. 异步编程:在处理异步操作时,如Ajax请求、定时器、事件循环等,可以使用发布订阅模式来在异步操作完成后通知相关的函数或组件。
  4. 消息队列:在Node.js中,发布订阅模式常用于实现消息队列,处理各种I/O操作,如读写文件、数据库操作等。
  5. 插件和模块间的通信:在构建可扩展的应用时,插件或模块之间可能需要相互通信,而发布订阅模式提供了一种解耦的方式来实现这一点。

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. 需求分析 目标用户&#xff…...

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来扩展渲染图形,从而获得更加丰富的图形展现。 通常情况下,我们创建的图形控件&#xff…...

【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&#xff0c;首先设置typora的图片设置 文件>偏好设置>图像 如下&#xff1a; 选择这个就会在此文件的同级目录下创建一个assets文件夹来存放此markdown文件的所有图片 然后勾选优先使用相…...

【React】使用 antd 加载组件实现 iframe 的加载效果

文章目录 代码实现&#xff1a; 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) --基础知识

爬虫 爬虫是什么&#xff1f; spider 是一种模仿浏览器上网过程的一种程序&#xff0c;可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…...

云原生系列 - Jenkins

Jenkins Jenkins&#xff0c;原名 Hudson&#xff0c;2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站&#xff08;英文&#xff09;&#xff1a;https://www.jenkins.io/ 官方网站&#xff08;中文&#xff09;&#xff1a;https://www.jenkins.io…...

django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出

使用crontab执行python脚本时&#xff0c;有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说&#xff0c;crontab使用的环境变量是非交互式(non-interactive)环境变量&#xff0c;而终端则使用交互式(inter…...

计算机网络入门 -- 常用网络协议

计算机网络入门 – 常用网络协议 1.分类 1.1 模型回顾 计算机网络细分可以划为七层模型&#xff0c;分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而上三层可以划为应用层中。 1.2 分类 1.2.1 应用层 为用户的应用进程提供网络通信服务&#xff0…...

【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现

文章目录 属性节点赋值和直接节点赋值的区别体现 属性节点赋值和直接节点赋值的区别体现 创建5个圆形指示灯&#xff0c;然后循环点亮&#xff0c;先给圆形指示灯赋值假变量&#xff0c;然后再进行循环。 运行结果&#xff0c;观察结果&#xff0c;发现刚开始运行时&#xff0…...

【数据库系列】Parquet 文件介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐: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…...

Leetcode3208. 交替组 II

Every day a Leetcode 题目来源&#xff1a;3208. 交替组 II 解法1&#xff1a;环形数组 把数组复制一份拼接起来&#xff0c;和 3101 题一样&#xff0c;遍历数组的同时&#xff0c;维护以 i 为右端点的交替子数组的长度 cnt。 如果 i ≥ n 且 cnt ≥ k&#xff0c;那么 i…...

汇编教程2

本教程主要教大家如何安装32位Linux虚拟机&#xff0c;为后续实验拆炸弹做准备 下载系统映像文件 以Ubuntu14.04.6系统为例 官方网站&#xff1a;下载地址 点击下载图中32位系统 如果官网进不去可以使用镜像网站 清华镜像网站&#xff1a;下载地址 进入之后找到下图中链接…...

使用 git 和 GitHub 互动

本文根据《GitHub入门与实践》整理 创建账户 要想使用GitHub那就必须先有GitHub账号,账号自行注册,不作介绍。 本地生成 SSH Key SSH 提供了一种安全的方式来通过不安全的网络进行通信。当你使用SSH key连接到GitHub时,你的身份是通过密钥对(一个公钥和一个私钥)来验…...

【Spring Boot 中的 `banner.txt` 和 `logback-spring.xml` 配置】

文章目录 一、banner.txt1. 创建自定义 banner.txt2. 配置 banner.txt 的内容 二、logback-spring.xml1. 创建 logback-spring.xml2. 配置 logback-spring.xml 一、banner.txt banner.txt 是 Spring Boot 项目启动时显示的自定义横幅内容。用来展示项目名称、版本信息或者其他…...

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查&#xff0c;我下面的服务器有漏洞&#xff0c;不得已重装了&#xff0c;正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版&#xff0c;就是管理python环境的得力助手。 # 创建一个名…...

Python PDF Magic:合并和拆分随心所欲

大家好&#xff01;小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体&#xff0c;还是将一个庞大的PDF文件拆分成多个小伙伴&#xff0c;都轻松hold住&#xff01;你准备好了吗&#xff1f;让我们开始这场奇妙的PDF操作之旅吧&#xff01; 准…...

Gmsh应用程序编程接口

Gmsh应用程序编程接口&#xff08;API&#xff09;允许将Gmsh库集成到使用C、C、Python、Julia或Fortran编写的外部应用程序中。从设计上讲&#xff0c;Gmsh API是纯粹功能性的&#xff0c;并且仅使用目标语言的基本类型。 API的结构反映了底层的Gmsh数据模型&#xff08;也请参…...

DP 203 学习笔记

考试内容总览 Learning Objects: 工具 Designing and implementing data storage 1. Storage Azure Synapse Analytics Azure Databricks Azure Data Lake Storage Gen2(ADLS2&#xff0c;可代替Hadoop Distributed File System也就是HDFS) 2. Shard Partition data store …...

SQLite 事务

SQLite 事务 SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中,特别是在移动设备和嵌入式系统中。它支持标准的 SQL 语法,包括事务处理。事务是数据库管理系统中的一个重要概念,它允许将一系列操作作为一个单独的工作单元来处理,以确保数据库的一致性和可靠性…...

LabVIEW和Alicat Scientific质量流量计实现精确流量控制

在现代工业自动化和科研实验中&#xff0c;精确的气体流量控制至关重要。这里将介绍一个使用LabVIEW与Alicat Scientific公司的质量流量计实现流量控制的项目。项目采用Alicat Scientific的质量流量计&#xff08;型号&#xff1a;M-200SCCM-D&#xff09;&#xff0c;通过LabV…...

佛山个人网站建设/如何优化网站推广

Time Limit: 10 second Memory Limit: 2 MB 问题描述 简单的背包问题。设有一个背包&#xff0c;可以放入的重量为s。现有n件物品&#xff0c;重量分别为w1&#xff0c;w2.....wn&#xff08;1≤i≤n&#xff09;,均为正整数&#xff0c;从n件物品中挑选若干件&#xff0c;使得…...

电脑外设网站建设论文/新冠疫情最新情况最新消息

Mybatis的功能架构三层&#xff1a; API接口层&#xff1a;提供给外部使用的接口API&#xff0c;开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层&#xff1a;负责具体的SQL查找、SQL解析、SQL执行和执行结果…...

苏州制作网站的有几家/网站排名在线优化工具

&#xff08;图片来源&#xff1a;网络&#xff09; 2022年2月4日&#xff0c;由量子经济发展联盟&#xff08;QED-C&#xff09;和总部位于加利福尼亚州的量子软件和服务公司QC Ware赞助&#xff0c;欧洲量子工业联盟和加拿大量子工业协助的Hyperion Research进行的一项新研究…...

新闻网站建设可行性分析报告/整合营销什么意思

2019独角兽企业重金招聘Python工程师标准>>> 错误描述&#xff1a; "Your password has expired. To log in you must change it using a client that supports expired passwords." 错误原因&#xff1a; 解决方法&#xff1a; 转载于:https://my.oschin…...

深圳网站建设公司jsp/百度指数在线查询

https://blog.csdn.net/vvyingning/article/details/76087148 https://jingyan.baidu.com/article/e4d08ffdace06e0fd2f60d39.html...

莆田网站制作/百度排名点击软件

计算原理&#xff1a;根据勾股定理算两个坐标直线距离 java版本 package com.application.util;/*** 地图坐标距离计算**/ public class LocationUtils {private static double EARTH_RADIUS 6378.137;private static double rad(double d) {return d * Math.PI / 180.0;}/***…...