JavaScript 中的扩展运算符有什么意义,尤其是在这个例子中?

What the point of spread operaror in JavaScript especially on this example?

我现在在 FreeCodeCamp 学习,这是一个挑战:

"We have defined a function, copyMachine which takes arr (an array) and num (a number) as arguments. The function is supposed to return a new array made up of num copies of arr. We have done most of the work for you, but it doesn't work quite right yet. Modify the function using spread syntax so that it works correctly (hint: another method we have already covered might come in handy here!)."

这是一个解决方案:

function copyMachine(arr, num) {
  let newArr = [];
  while (num >= 1) {
    // Only change code below this line
newArr.push([...arr])
    // Only change code above this line
    num--;
  }
  return newArr;
}

console.log(copyMachine([true, false, true], 2));

如果我可以只添加 newArr.push(arr) 并获得相同的结果,那么添加额外的括号和点 (...) 有什么意义呢? 结果是:[ [ true, false, true ], [ true, false, true ] ]

参考问题

当使用此语法 newArr.push(arr) 时,您是从参数中推送原始数组,因此每当 arr 更改其内容时,newArr 中的数组也会更新,因为它始终相同一个数组。

使用扩展语法时,您实际上是在推送 arr 的副本。这意味着它是一个新数组,与您传递给函数的数组无关

考虑一下

function copyMachine(arr, num) {
  let newArr = [];
  while (num >= 1) {
    // Only change code below this line
newArr.push(arr)
    // Only change code above this line
    num--;
  }
  return newArr;
}
const oldArr = [true, false, true];
const newArr = copyMachine(oldArr, 2);
oldArr.push(true);
console.log(newArr); // contains an element added to the old array

扩展语法 (...) 允许在需要零个或多个参数(用于函数调用)或元素(用于数组文字)或对象的地方扩展数组表达式或字符串等可迭代对象在需要零个或多个键值对(对于对象文字)的地方扩展表达式。

在提供的代码中,展开运算符用于使用名为 arr 的数组元素创建一个新数组,然后将其推送到 newArr.

这类似于 newArr.push(arr);