ECMAScript规范定义的全量JavaScript错误类型列表与测试套件查询
ECMAScript标准错误类型汇总与GraalJS适配参考
规范明确定义的原生错误类型
当前ECMAScript 2024正式规范中,明确定义的Error子类共8种,所有符合规范的JS引擎都必须实现这些错误类型的对应逻辑:
Error:所有错误的基类,用于通用错误场景,无特定类型归属的引擎错误也会使用该类型抛出EvalError:与eval()函数执行异常相关的错误类型,目前规范中仅做向后兼容保留,新版引擎极少主动抛出该类型错误,仅在极个别eval调用方式非法的旧兼容场景下触发RangeError:当参数或值不在合法取值范围内时抛出,典型场景包括设置数组长度为负数、Number.prototype.toFixed()传入超出0-100范围的参数、数值转换超出JS可表示的安全范围等ReferenceError:引用不存在的绑定、在暂时性死区(TDZ)阶段访问let/const声明的变量时触发SyntaxError:JS源码解析阶段不符合语法规则时抛出,典型场景包括括号不匹配、非法使用关键字、JSON解析失败等TypeError:操作值的类型不符合预期时抛出,是日常开发中最常见的错误类型,典型场景包括对null/undefined读取属性、将非函数类型的值作为函数调用、对不可写属性重新赋值等URIError:全局URI处理函数(encodeURI/decodeURI/encodeURIComponent/decodeURIComponent)传入非法格式参数时抛出AggregateError:ES2021新增的错误类型,用于包装多个同批次触发的错误,典型场景为Promise.any()所有传入Promise均reject时抛出,错误实例通过errors属性存储所有子错误对象
注意:
InternalError不属于ECMAScript规范定义的标准错误类型,是各引擎自行实现的非标准扩展,GraalJS中栈溢出、引擎内部资源耗尽等场景会抛出该类型错误,适配时需要单独做兼容处理。
对应测试套件参考
- ECMA官方Test262测试集:是ECMA组织维护的JS语言一致性权威测试套件,覆盖了所有标准错误类型的触发场景、抛出条件校验,你可以直接筛选套件中错误断言相关的用例,作为你适配错误逻辑的校验基准,不需要手动汇总所有错误场景。
- GraalJS原生测试集:GraalJS开源仓库的测试模块中,已经包含了所有标准错误类型的触发case,适配自定义错误逻辑时可以直接复用这部分用例,避免改造后和引擎原有行为出现不一致。
GraalJS侧适配提示
- 不要修改标准错误对象的原型链,所有自定义的友好提示、扩展信息建议通过错误对象的附加属性传递,避免破坏上层JS代码对错误类型的
instanceof判断逻辑。 - GraalJS抛出的错误对象默认携带栈信息、源码行列号、引擎内部错误码等扩展属性,适配时不要覆盖这些原有属性,可在错误生成的拦截钩子上补充上下文提示、修复建议等自定义内容。
- 优先做内部异常到标准错误类型的映射:GraalJS运行时Java侧抛出的内部异常,需要全部映射到对应的标准错误类型,不要直接将Java异常暴露给JS层。
- 重点覆盖易漏场景:暂时性死区访问、超大数组长度赋值、递归栈溢出、
AggregateError透传等场景需要单独校验,确保错误类型完全符合规范要求。
内容的提问来源于stack exchange,提问作者yushie
相关产品推荐
相关产品推荐

