此函数中 Array() 的上下文

New*_*his 3 javascript arrays jasmine

  it("should know properties that are functions act like methods", function() {
    var meglomaniac = { 
      mastermind : "Brain", 
      henchman: "Pinky",
      battleCry: function(noOfBrains) {
        return "They are " + this.henchman + " and the" +
          Array(noOfBrains + 1).join(" " + this.mastermind);
      }
    };

    var battleCry = meglomaniac.battleCry(4);
    expect('They are Pinky and the Brain Brain Brain Brain').toMatch(battleCry);
  });
Run Code Online (Sandbox Code Playgroud)

这段代码(第 7 行)中 Array 的定义是什么?我查了一下,它看起来像是一个 Array.of() 命令,它生成一个长度为 n 的空数组,在这种情况下为 5?那么为什么假设这是正确的假设,它最终只有 4 个大脑输入?或者这个 array() 是做什么的?

Cer*_*nce 5

battleCry(4)意味着它Array(noOfBrains + 1)的长度确实是 5:

[empty, empty empty, empty, empty]
Run Code Online (Sandbox Code Playgroud)

但是当你.join这 5 个元素时,你只它们之间空格中插入了一些东西,而且只有 4 个空格:

[empty, empty empty, empty, empty]
//     ^     ^      ^      ^
Run Code Online (Sandbox Code Playgroud)

因此,您最终会this.mastermind在结果字符串中出现 4 次。

这段代码相当混乱。我强烈喜欢类似的东西.repeat

[empty, empty empty, empty, empty]
Run Code Online (Sandbox Code Playgroud)

Array只是数组构造函数。它并没有什么特别的,它只是创建了一个length包含参数的数组(当传递一个数字时)。

  • @NewAtLearningThis 它被称为“稀疏数组” - 其“.length”与作为数组索引的自有属性的数量不匹配。最好始终避开它们。这里,数组没有任何数组索引属性,只有 5 的 `.length` - 但 `.join` 会迭代从 `0` 到 `length - 1` 的所有索引,*无论这些属性实际上是否存在存在于数组*上。访问它们会返回“undefined”,当将其放入“.join”的字符串中时,它会变成空字符串。 (2认同)