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

Why does V8 give this confusing error message?

在 chrome/node 上(我想一般是 v8),下面给出了一条错误消息:

Uncaught TypeError: f is not iterable

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

为什么会产生这样一个模棱两可的错误信息?恕我直言,这与 f?

无关

例如在 firefox (spidermonkey) 上,我得到一个可以理解的 "undefined has no properties"。如果我使用对象 (let o = {}; f(...o.p);),我会得到更准确的 "o.p is undefined".

以前可能有人问过这个问题,但我不知道要搜索什么 - "function not iterable" 给出了大量不相关的结果。

PS:作为一个有趣的事实,显然,如果 f 可迭代,则错误不会消失:f[Symbol.iterator] = function*() {};。错误信息似乎完全错误。

这里是 V8 开发人员。这看起来像一个错误。请在 crbug.com/v8/new.

提交错误