我遇到了一段有趣的代码:
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)
时,它会给出这个奇怪的输出:
Array(x+1) (3) [empty × 3]
我知道在字符串上存在repeat()
方法,可以愉快地使用它来获得与呈现函数相同的结果。但正如我所遇到的那样,我想知道Array(x+1)
背后的机制。我也知道数组或new Array()
是什么。但这是我第一次看到的。
答案 0 :(得分:3)
Array
,new
是可选的。来自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));
})