具有解构数组默认参数的函数的非数组参数给出 TypeError

Non-array argument to function with destructured Array default parameters gives a TypeError

我已经定义了函数prod,它利用了 ES6 的默认参数和解构:

function prod([a, b, c] = [1, 2, 3]) {
  console.log(a * b * c);
}

当不带参数调用时,它会按预期将 6 记录到控制台。

prod() // 6

使用参数数组调用时,它会记录正确的产品:

prod([2, 3, 4]) // 24

当使用多个参数调用时,会抛出错误:

prod(2, 3, 4) // Uncaught TypeError: undefined is not a function(…)

为什么会抛出 undefined is not a function 错误?

编辑

我明白为什么它会抛出错误。我不明白的是为什么它会抛出那个特定的错误。

问题是它需要一个参数数组,而不是 3 个单独的参数。所以这样做:prod([1, 2, 3]) 会给你预期的答案。

当我在 Firefox 中 运行 prod(1, 2, 3) 时出现此错误:TypeError: [Symbol.iterator] is not a function.

根据 mdn 文档 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator#Non-well-formed_iterables)

该函数期望使用@@iterator 方法返回一个可交互对象。因为那个方法不存在(因此不是一个函数)你得到 is not a function error