如何对JavaScript错误类型分类?是否有匹配err对象属性的错误分类列表?
JavaScript错误相关问题解答
1. JavaScript错误类型的分类方式
可以按照错误发生的阶段和原因,分成三大类:
- 语法错误:代码不符合JavaScript的语法规则,程序还没开始执行就会报错。比如少写了闭合括号、变量名用了关键字、加了非法字符。像你示例里的"Unexpected identifier"就属于这类,对应的错误类型名是
SyntaxError。 - 运行时错误:代码语法没问题,但程序运行到某一步时卡壳了。比如访问不存在的变量、把不是函数的东西当函数调用、给只读属性赋值。对应的错误类型有
ReferenceError、TypeError、RangeError等。 - 逻辑错误:代码能正常跑,但结果不对。比如循环条件写错导致死循环、计算时用错运算符、判断逻辑搞反了。这类错误不会触发JS自带的报错,但可以给孩子提示“代码能运行啦,但结果不对哦,检查下是不是哪里逻辑错了~”。
2. 是否存在匹配err对象任意属性的错误分类列表?
没有官方的、能匹配err对象所有属性的统一分类列表,但可以基于Error对象的核心属性来做可靠分类:
- 优先用
err.name分类:JS标准错误类型(比如SyntaxError、ReferenceError)的name属性是固定的,比匹配message靠谱——不同环境下同一种错误的message可能有不同表述,但name是统一的。 - 如果要覆盖更多场景,可以结合
err.message里的关键词,但要注意不同浏览器、Node.js环境的错误消息可能有差异。 - 要是你自己定义错误,可以给err对象加自定义属性来分类,但这属于自定义扩展,没有通用列表。
给你改个示例代码,用err.name判断会更稳定:
const errorTranslate = (err) => { let hint; switch (err.name) { case "SyntaxError" : hint = "哎呀,代码写得有点小问题哦!检查下是不是少写了括号、引号,或者变量名写错啦~"; break; case "ReferenceError" : hint = "找不到你说的那个变量哦!是不是拼写错名字,或者还没定义就用啦?"; break; case "TypeError" : hint = "这个东西不能这么用哦!比如你是不是把数字当函数来调用啦?"; break; default: hint = err.message; } return hint; }
内容的提问来源于stack exchange,提问作者TOTΣM
相关产品推荐
相关产品推荐

