使用扩展运算符创建数组

Creating array with spread operator

这是我在一本 React 书中找到的 javascript 箭头函数:

const createArray = (length) => [...Array(length)];

为什么不直接 return 一个新数组?

const createArray = (length) => Array(length);

如果我使用任一定义记录 createArray(7) 的结果,我会得到相同的结果:

(7) [undefined, undefined, undefined, undefined, undefined, undefined, undefined]

与第二个定义相比,第一个定义实现了什么?

两种创建数组的方式不同。它们不会产生相同的结果。

第二种创建数组的方法将创建一个只有 length 自己的 属性 并且没有索引属性的稀疏数组。您可以使用 Object.getOwnPropertyNames()

查看此内容

const arr = new Array(5);
console.log(Object.getOwnPropertyNames(arr));

使用扩展语法将创建一个数组,将索引属性,如以下代码示例所示:

const arr = [...new Array(5)];
console.log(Object.getOwnPropertyNames(arr));

Array(length); 将创建一个 稀疏数组 - 一个没有自身属性的数组(length 除外),它不能通过数组迭代进行迭代方法:

const arr = new Array(7);

console.log(arr.hasOwnProperty('4'));
arr.forEach(() => {
  console.log('iteration');
});

相比之下,使用扩展语法将正确填充新数组:

const arr = [...new Array(7)];

console.log(arr.hasOwnProperty('4'));
arr.forEach(() => {
  console.log('iteration');
});

我希望你想要它的例子。

更多信息 = > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

const testArr = [
        { name: false, expected: false },
        { name: null, expected: false },
        { name: undefined, expected: false },
        { name: "", expected: false },
        { name: "  \t\n", expected: false },
    ];
    
    const createArray = (arr) => { return [...arr]}
    
    console.log(createArray(testArr))