Error Stack Accessor S3
中文标题:错误堆栈访问器
提案概览
- 阶段: Stage 3
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
本提案标准化了现有的 Error.prototype.stack 访问器,允许读取和设置错误对象上的堆栈跟踪,且不引入任何新的面向开发者的 API。它通过仔细定义设置器语义(如对非对象参数抛出异常,以及对非错误接收器视为无操作)来解决安全问题。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
错误堆栈访问器
面向 Error.prototype.stack 的 ECMAScript 提案、规范及参考实现。
推动者:
规范作者:
理由
在语言规范中,错误从未附带堆栈跟踪——然而,各实现始终如一地在实例化的 Error 对象上提供一个名为“stack”的属性。长期以来,人们一直担心不当标准化堆栈跟踪——以至于实现无法在提供安全保证的同时声称完全符合规范。本提案试图开始对现有浏览器行为的交集进行标准化,并以解决这些安全顾虑的方式展开。
历史
本提案是从错误堆栈提案中分离出来的,后者在实现者阻力克服之前还需要大量工作。
特别是,它不包含任何新增的净表面 API——仅包含长期以来存在于 Error 实例上的 stack 属性。
设置器
在理想情况下,设置器不会存在,但出于网络兼容性需求的假设,它被包含在本提案中。 本提案中该设置器当前的语义是:
- 尝试以非对象或无值调用该函数将抛出异常
- 以非错误接收器调用该函数将视为无操作
- 尝试在真实
Error对象上 [[Set]] 任何值将使用与Iterator.prototype.constructor相同的逻辑,并在对象上不存在自有属性时安装一个自有属性。
我们也更倾向于在提供非字符串参数时抛出异常,但网络兼容性在此情形下是否成立远没有那么明确。
命名
Error.prototype.stack 的名称已固定不变——这是既定事实的网络现实。
规范
您可以查看以 HTML 形式渲染的规范。