javascript - 函数参数中的数组解构

标签 javascript arrays function

我这里有一些与数组解构相关的东西,但我并不完全理解。

在下面的例子中:

function foo( [a, b, c] ) {
    console.log(a, b, c)
}

foo( 1, 2, 3 );

当我运行它时,出现以下错误:

Uncaught TypeError: undefined is not a function

现在,我不是在质疑这样一个事实,即它不会像人们预期的那样输出 1, 2, 3,因为实际上只有第一个值 1 会被解构( a = 1[0], b = 1[1], c = 1[2]).

但事情是这样的:

我可以完美地编写 1[0]、1[1]、1[2],并且我对其中的每一个都得到了 undefined

那为什么我上面写的 foo 函数会抛出异常,而不是像我期望的那样简单地返回 3 次 undefined

确实,如果我按如下方式编写 bar,我会得到 3 个 undefined,这是应该发生的。

function bar() {
    console.log( 1[0], 1[1], 1[2] )
}

bar();
// undefined undefined undefined

谁能告诉我 JS 在第一个 foo() 中做了什么以及为什么输出不是 undefined undefined undefined

最佳答案

使用数组模式进行解构在后台使用迭代,即被解构的值必须是可迭代的。

事实上,在 Firefox 中,错误消息似乎更具指示性:

TypeError: (destructured parameter) is not iterable

这就是您对 1[0]、1[1]、1[2] 进行比较时出错的地方:不需要 1可迭代。

更正确的比较是这样的:

console.log([...1]);
// or:
const [a, b, c] = 1;

...该代码将失败。

关于javascript - 函数参数中的数组解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326392/

相关文章:

javascript - 隐藏单选按钮直到满足条件

javascript - 为什么 Todo 项目在点击提交按钮两次时才保存到 localStorage?

javascript - 是否可以将元素插入 MongoDB 文档中的数组中间?

python - 如何在 Maya 中使用 Def Function 字符串

javascript - Web Worker 在 HTML5 Canvas 处理中内存不足

javascript - 传单:使用弹出窗口时,点击事件并不总是被触发

javascript - JS输出数组数据

java - 抽出一张牌后将其丢弃

Java 函数指针和自动装箱

c - 函数参数数据类型错误