我这里有一些与数组解构相关的东西,但我并不完全理解。
在下面的例子中:
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/