力扣 30 天 JavaScript 挑战 第三题笔记

发布于:2025-08-12 ⋅ 阅读:(19) ⋅ 点赞:(0)

在这里插入图片描述

/**
 * @param {string} val
 * @return {Object}
 */
var expect = function(val) {
    return {
        toBe(val2){
            if(val !== val2) throw new Error("Not Equal")
            return true

        },
        notToBe(val2){
            if(val === val2) throw new Error("Equal")
            return true
        }
    }
};

/**
 * expect(5).toBe(5); // true
 * expect(5).notToBe(5); // throws "Equal"
 */

学到的知识点

1. 函数可以返回对象(对象里包括变量以及函数)

2. js中抛出错误 错误处理主要通过使用 throw 语句和 try…catch 块来实现。使用 throw 语句允许你创建自定义错误消息。

  1. 抛出字符串
    在try里面通过throw抛出一个字符串,在catch里面会被捕捉到。
function checkName(name) {
 if (name === '') {
   throw "Name can't be empty!";
 }
 return name;
}

try {
 console.log(checkName(''));
} catch (error) {
 console.error(error); // "Name can't be empty!"
}
  1. 抛出 Error 实例:
    一种更常见和推荐的方法是抛出一个 Error 实例。这允许在错误中包含比如堆栈跟踪的附加元数据,有助于调试。
    附加元数据有什么用?
  • message
    你自己提供的错误描述,便于知道出错原因。
  • stack(堆栈跟踪)
    自动记录了代码执行到出错时的调用链和具体行号。
    开发时可以快速定位 bug 在哪里发生。
  • name
    错误的类型(比如 Error, TypeError, RangeError 等),便于分类处理。
function divide(numerator, denominator) {
  if (denominator === 0) {
    throw new Error("Cannot divide by zero!");
  }
  return numerator / denominator;
}

try {
  console.log(divide(5, 0));
} catch (error) {
  console.error(error.message); // "Cannot divide by zero!"
  console.error(error.name)
  console.error(error.stack) 
}
  1. 抛出错误集合
    有时候,你可能希望同时抛出多个错误。这在处理 Promise 时特别有用。JavaScript 有一个内置的 AggregateError 对象,可以在这类情况下使用。AggregateError 对象可以接受一个错误对象的可迭代集合(可迭代集合就是可以用 for…of 或 forEach 一次次取出来的)和一个可选的消息作为参数。在 Promise.any() 等方法中,如果所有 Promise 都失败,JavaScript 会抛出一个 AggregateError,里面包含所有失败原因。
let error1 = new Error("First Error");
let error2 = new Error("Second Error");

try {
 throw new AggregateError([error1, error2], "Two errors occurred.");
} catch (error) {
 if (error instanceof AggregateError) {
   console.error(error.message); // "Two errors occurred."
   for (let e of error.errors) {
     console.error(e.message); // 打印 "First Error" 和 "Second Error"
   }
 }
}

网站公告

今日签到

点亮在社区的每一天
去签到