繁体   English   中英

用作 function 参数时的 JavaScript 数组解构问题

[英]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) => {

onetwo得到分配给它们的数字, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM