JavaScript设计模式:字符串由带join(';';)的空格组成。之后。分开(';';)-目的?

JavaScript设计模式:字符串由带join(';';)的空格组成。之后。分开(';';)-目的?,javascript,arrays,Javascript,Arrays,我在CodePen上看到过这种模式: var demo = new Array(3); demo = demo.join(' ').split(' '); 有人能给我解释一下这个模式吗? 它只是为了得到一个包含n个空字符串的数组吗? 还是针对别的什么 我在其中看到的代码笔: 请参阅函数nJoin() 您正在使用此操作生成一个包含空字符串的数组 : map按顺序为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组。回调仅对具有赋值的数组索引调用,包括。对于数组中缺少的元素(即从

我在CodePen上看到过这种模式:

var demo = new Array(3);

demo = demo.join(' ').split(' ');
有人能给我解释一下这个模式吗?

它只是为了得到一个包含n个空字符串的数组吗? 还是针对别的什么

我在其中看到的代码笔:


请参阅函数nJoin()

您正在使用此操作生成一个包含空字符串的数组

:

map
按顺序为数组中的每个元素调用一次提供的
回调
函数,并根据结果构造一个新数组。回调仅对具有赋值的数组索引调用,包括。对于数组中缺少的元素(即从未设置、已删除或从未赋值的索引),不会调用它

var-demo=新数组(3);
console.log(demo.length);
console.log(demo[0]);
console.log(演示类型[0]);
demo=demo.join(“”).split(“”);
console.log(demo.length);
console.log(demo[0]);
console.log(演示类型[0]);
//映射到具有稀疏值的数组。
var a=新阵列(3),
b=a.map((u,i)=>i);
console.log(a[0]);
控制台日志(b);
//映射到具有未定义值的数组。
var x=Array.apply(null,{length:3}),
y=x.map((u,i)=>i);
console.log(x[0]);

控制台日志(y)只是创建一个带有空字符串的数组。请注意,对于es6,您可以使用以下替代方法使其更容易阅读:


请参阅浏览器支持表,在撰写本文时,这是一项新功能。

是否仅用于获取包含n个空字符串的数组?或者它是针对别的东西吗?
->是的。哈哈,是A还是B?是:D@jAndy
Array(3)
是一个长度为3的稀疏/空数组,在合并和拆分后,您有一个包含三个
“”
的数组->数组不再为空;虽然这在谈论空字符串时听起来很奇怪。在执行此任务之前和之后,检查演示中的
0或
demo.hasOwnProperty(0)
Object.keys(演示)
。尤其是
demo.forEach(console.log)
如果确实需要回答这个问题,您应该提到,不能对具有
未定义值的数组执行
.map()
。这就是为什么该代码的原始作者(CodePen)事先将该数组转换为空字符串的原因。好的。我想我明白了。可以说这是一种循环的替代方式吗?也可以使用“for(i=0;i<3;i++)”?但这并不是很酷……对于带有索引的循环来说确实有效,因为数组的length属性是用“newarray(3)”给出的。但里面并没有初始化的元素。我并没有在上面100%正确地表达我自己。如果未定义的值位于已定义的数组中,则可以对这些值执行
.map()
操作。使用
new Array()
创建数组时,问题就会出现,因为它只会设置
.length
属性,但不会向其中填充任何内容。因此,您不能对该映射进行迭代。仅出于这个原因,作者就用伪值填充了新创建的数组。
var a = new Array(3).fill("");
console.log(a); // ["", "", ""]