没有关键字new的Array()是什么?

时间:2018-01-18 12:53:56

标签: javascript arrays

我遇到了一段有趣的代码:

function repeat(str,x) {
    return Array(x+1).join(str); 
}
repeat("wow", 2);

结果是字符串"wowwow"。但是,我不知道这个Array(x+1)实际上在做什么。非常有趣的是,如果我只使用Array(x),它只打印str一次而不是预期的两倍。

当我在console.log Array(x+1)时,它会给出这个奇怪的输出:

enter image description here

Array(x+1) (3) [empty × 3]

我知道在字符串上存在repeat()方法,可以愉快地使用它来获得与呈现函数相同的结果。但正如我所遇到的那样,我想知道Array(x+1)背后的机制。我也知道数组或new Array()是什么。但这是我第一次看到的。

5 个答案:

答案 0 :(得分:3)

指定了

Arraynew是可选的。来自the spec

  

当作为构造函数调用时,它会创建并初始化一个新的Array异常对象。当Array作为函数而不是构造函数调用时,它还会创建并初始化一个新的Array对象。 因此函数调用Array(…)等同于具有相同参数的对象创建表达式new Array(…)

(我的重点)

令我惊讶的是,the MDN page对此并不清楚。如果我有时间,我可能要解决这个问题......

答案 1 :(得分:2)

正如您在控制台Array(x+1)中看到的那样,创建了包含3个空元素的数组(直到x = 2)。然后使用字符串wow加入这些元素,这样就可以了:

空元素+“哇”+空元素+“哇”+空元素=“哇哇”

答案 2 :(得分:0)

Array(x + 1)创建一个包含3个元素的数组,所有元素都包含空元素。 稍后您将使用字符串哇加入这些空元素,从而返回: 空+“哇”+空+“哇”+空=> wowwow

答案 3 :(得分:0)

这是一个创建数组的函数。 这样的事情,你应该在询问之前在你的控制台中尝试。

这些事情可以在Javascript中完成,即使它们有点直观:

function A() {
    return new Array();
}
let myA1 = A(); // returns an array
let myA2 = new A(); // also returns an array.

编辑: 原因是Javascript是一种原型语言,“Class”只是我们新的功能。如果该函数没有返回任何东西,我们在案例A中得到一个新实例,如果该函数返回一些其他对象,则返回该对象。

答案 4 :(得分:0)

创建一个大小为x + 1的数组(在本例中为3)。并使用str变量值填充每个单元格。

在这段代码中,我创建了一个大小为3的单元格数组,并用字符串" yolo"填充它们。

$(document).ready(function(){
 var str = "yolo";

 console.log(Array(4).join(str));  
})

示例小提琴:https://jsfiddle.net/6o90fv9c/