你知道JavaScript这六种错误类型吗?
前言
今日话题,了解JavaScript的错误处理机制。
一、ReferenceError
引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。
举栗子
try {
console.log(a) // a 未声明的变量
} catch (e) {
if (e instanceof ReferenceError) {
console.log(e.name + ": " + e.message); // ReferenceError: a is not defined
}
}
构建一个ReferenceError
try {
throw new ReferenceError('Hello', 'someFile.js', 10);
} catch (e) {
console.log(e instanceof ReferenceError); // true
console.log(e.message); // "Hello"
console.log(e.name); // "ReferenceError"
console.log(e.fileName); // "someFile.js"
console.log(e.lineNumber); // 10
console.log(e.columnNumber); // 0
console.log(e.stack); // "@Scratchpad/2:2:9\n"
}
如果未声明变量就使用,就会抛出这个异常哦!
二、TypeError
变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。
举栗子
try {
var a = {}
a.go()
} catch (e) {
if (e instanceof TypeError) {
console.log(e.name + ": " + e.message); // TypeError: a.go is not a function
}
}
三、EvalError
在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。
举栗子
var myEval = eval;
myEval("alert('call eval')");
ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。
四、RangeError
数值变量或参数超出其有效范围
举栗子
try {
[].length = -1
} catch (e) {
if (e instanceof RangeError) {
console.log(e.name + ": " + e.message); // RangeError: Invalid array length
}
}
五、SyntaxError
语法错误,比如变量名不规范
举栗子
try {
var 1
} catch (e) {
if (e instanceof SyntaxError) {
console.log(e.name + ": " + e.message); // SyntaxError: Unexpected number
}
}
六、URIError
给 encodeURI()或 decodeURl()传递的参数无效
举栗子
捕获一个URIError
try {
decodeURIComponent('%');
} catch (e) {
console.log(e instanceof URIError); // true
console.log(e.message); // "malformed URI sequence"
console.log(e.name); // "URIError"
console.log(e.fileName); // "Scratchpad/1"
console.log(e.lineNumber); // 2
console.log(e.columnNumber); // 2
console.log(e.stack); // "@Scratchpad/2:2:3\n"
}
创建URIError实例
try {
throw new URIError('Hello', 'someFile.js', 10);
} catch (e) {
console.log(e instanceof URIError); // true
console.log(e.message); // "Hello"
console.log(e.name); // "URIError"
console.log(e.fileName); // "someFile.js"
console.log(e.lineNumber); // 10
console.log(e.columnNumber); // 0
console.log(e.stack); // "@Scratchpad/2:2:9\n"
}
兼容性
FannieGirl原创文章,想了解更多前端内容,关注我的博客园
https://www.cnblogs.com/ifannie/
转载务必声明出处哦~~~~更多操作,扣我
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?