[英]Creating an Array clone with spread operator, but it still has reference to original array
[英]Creating array with spread operator
这是我在 React 书中找到的 javascript 箭头 function:
const createArray = (length) => [...Array(length)];
为什么不简单地返回一个新数组?
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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.