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-ignore
copied[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);
});