[英]JavaScript array destructuring issue when used as function parameters
当我解构一个空数组并将其作为参数传递给我的 function 时,它会出现在我没想到的地方。
这就是你应该如何将数组解构为 function 参数:
let test = (one, two, three) => { console.log(one); console.log(two); console.log(three); }; test(...[1, 2, 3]); // returns 1, 2, 3
但是在我的情况下,我想将数组解构为单个 function 参数。
有时这个数组是空的,但否则它只有一个 object。 它没有按预期工作:
let test = (one, two, three) => { if (three === undefined) { console.log("3 is undefined"); } }; test(...[], 2, 3); // 3 is undefined
three
是未定义的,但这肯定不是真的,因为one
未定义的。
到底是怎么回事?
当您将可迭代对象传播到参数列表中时,可迭代对象的所有元素都将插入到该点的参数列表中,并且 arguments 的 rest 将在该点的末尾开始。 但是一个空数组不包含任何元素。 把这个:
...[],
在参数列表中什么都不做 - 它相当于一个段根本不存在,因为它没有插入 arguments,并且 arguments 位于...[],
的右侧,它们从其他位置开始。
test(...[], 2, 3);
是相同的
test(2, 3);
所以
let test = (one, two, three) => {
one
和two
得到分配给它们的数字, three
是未定义的 - 因为总共通过了两个 arguments。
另请注意,您的问题中根本没有解构 - 您所做的只是调用传播语法。
let test = (one, two, three) => {
if (one === undefined) {
console.log("3 is undefined");
}else{
console.log(one)
}
};
test(...[], 2, 3);
第一个参数是2,第二个是3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.