【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):置入键值对

相关推荐

  1. 八股文day9——计算机网络(9

    2024-07-20 14:34:03       62 阅读
  2. 条款25:考虑写一个不异常的swap函数

    2024-07-20 14:34:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 14:34:03       169 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 14:34:03       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 14:34:03       155 阅读
  4. Python语言-面向对象

    2024-07-20 14:34:03       169 阅读

热门阅读

  1. SpringBoot使用Jasypt加密

    2024-07-20 14:34:03       33 阅读
  2. Linux 之 awk命令详解

    2024-07-20 14:34:03       34 阅读
  3. 电机线电流与转差率曲线理论推导

    2024-07-20 14:34:03       31 阅读
  4. 【HTTP 与 HTTPS 介绍与区别】

    2024-07-20 14:34:03       33 阅读
  5. (81)组合环路--->(05)避免组合环路

    2024-07-20 14:34:03       38 阅读
  6. 3.Implementing Controllers

    2024-07-20 14:34:03       29 阅读
  7. axios(ajax请求库)

    2024-07-20 14:34:03       27 阅读
  8. C++题目_中缀表达式转后缀表达式(常考)

    2024-07-20 14:34:03       33 阅读
  9. 差分进化(Differential Evolution)算法

    2024-07-20 14:34:03       39 阅读
  10. Cyclic Operations

    2024-07-20 14:34:03       27 阅读
  11. VScode如何进行调试

    2024-07-20 14:34:03       31 阅读
  12. 规范:需求管理规范

    2024-07-20 14:34:03       31 阅读