为什么V8会给出这个令人困惑的错误消息?

3
在Chrome/Node(通常是V8),以下内容会显示错误消息:
Uncaught TypeError: f不可迭代

function f(){}
f(...undefined);

为什么会生成如此模棱两可的错误信息? 我认为这与 f 无关?
例如,在火狐浏览器(spidermonkey)上,我得到了一个可以理解的“未定义的属性”。 如果我使用一个对象(let o = {}; f (...o.p);),我会得到一个更准确的“o.p未定义”的错误。
这可能以前已经被问过了,但我不知道要搜什么 - “function not iterable”会得到大量无关的结果。
PS:作为有趣的事实,显然,如果让f可迭代,则错误不会消失:f [Symbol.iterator] = function *(){};。 错误消息似乎是完全错误的。

这只是一个错误的错误信息。它试图调用 f(),在收集参数时遇到了错误,并错误地将错误归因于 f - jfriend00
我猜这只是错了。它发生在相当复杂的高阶函数调用中。在我注意到其中一个扩展参数由于一个非常简单的错误而为undefined之前,这个问题花费了我5-10分钟的时间。在这种情况下,很难立即清楚错误消息完全无效。如果没有明显地展示其中一个参数是undefined,我可能仍然会试图修复它。 - Doofus
1个回答

1

我是一名V8开发人员。这看起来像一个bug。请在crbug.com/v8/new上报告一个bug。


谢谢!在链接的网站上,我发现这个 bug 已经有一个开放问题了。 - Doofus
1
好消息:该 bug 已经修复!修复将会在 V8 8.2 / Chrome 82 中发布。 - jmrk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接