1、手写深度拷贝函数
function deepCopy(data:any) {if (typeof data !== 'object' || data === null) {return data; // 非对象直接返回};let copied = Array.isArray(data) ? [] : {};for (let key in data) {if (data.hasOwnProperty(key)) {//@ts-ignorecopied[key] = deepCopy(data[key]); // 递归复制子对象或子数组}}return copied;}
2、抓取异常相关的方法
- 可以使用try-catch语句来捕获异常。这是一种结构化的方式来处理可能会引发错误的代码块。
try {// 可能会引发异常的代码块// 例如,尝试访问一个未定义的变量console.log(undefinedVariable);
} catch (error) {// 如果上面的代码块引发了异常,这里将会捕获到异常并执行下面的代码块console.error("An error occurred:", error);
}
在上面的示例中,try代码块中的语句尝试访问一个未定义的变量undefinedVariable,这会引发一个异常。如果异常被引发,控制流将转移到catch代码块中,并且error参数将包含有关错误的信息,可以通过它来识别发生了什么错误。
- throw语句:你可以使用throw语句来手动抛出异常。这在某些条件下,你希望在特定情况下引发异常时很有用。
function divide(a, b) {if (b === 0) {throw new Error("Division by zero is not allowed.");}return a / b;
}try {console.log(divide(10, 0)); // 这里会引发异常
} catch (error) {console.error("An error occurred:", error);
}
- window.onerror事件:当JavaScript发生未被捕获的异常时,浏览器会触发window.onerror事件。你可以使用它来全局监控JavaScript异常,但要注意,它不能捕获所有类型的异常。
window.onerror = function(message, source, lineno, colno, error) {console.error("An error occurred:", message, source, lineno, colno, error);
};
这会在全局范围内捕获所有未被捕获的异常,并在控制台中打印错误消息、源、行号、列号以及错误对象。
- Promise.catch()方法:在使用Promise时,你可以使用.catch()方法来捕获Promise链中的异常。
somePromiseReturningFunction().then(result => {// 处理成功情况}).catch(error => {// 处理异常情况console.error("An error occurred:", error);});