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