Javascript 没有关键字new的Array()是什么?
我遇到了一段有趣的代码:Javascript 没有关键字new的Array()是什么?,javascript,arrays,Javascript,Arrays,我遇到了一段有趣的代码: function repeat(str,x) { return Array(x+1).join(str); } repeat("wow", 2); 结果是一个字符串“wowow”。但是,我不知道这个数组(x+1)实际上在做什么。非常有趣的是,如果我只使用Array(x)它只打印str一次,而不是预期的两次 当I console.logArray(x+1)时,它会给出以下奇怪的输出: 数组(x+1)(3)[空×3] 我知道字符串上存在一个repeat()方法
function repeat(str,x) {
return Array(x+1).join(str);
}
repeat("wow", 2);
结果是一个字符串“wowow”
。但是,我不知道这个数组(x+1)
实际上在做什么。非常有趣的是,如果我只使用Array(x)
它只打印str
一次,而不是预期的两次
当I console.logArray(x+1)
时,它会给出以下奇怪的输出:
数组(x+1)(3)[空×3]
我知道字符串上存在一个
repeat()
方法,可以很高兴地使用它来实现与所提供函数相同的结果。但正如我所遇到的,我想知道数组(x+1)
背后的机制。我还知道什么是数组或newarray()
。但是这是我第一次看到。数组
被指定为new
是可选的。发件人:
当作为构造函数调用时,它创建并初始化一个新的数组外来对象。当数组作为函数而不是构造函数调用时,它还会创建并初始化一个新的数组对象因此,函数调用Array(…)
等价于具有相同参数的对象创建表达式newarray(…)
。
(我的重点)
令我惊讶的是,他对此一无所知。如果我有时间,我可能必须修复…正如您在控制台
数组(x+1)
中看到的那样,创建一个包含3个空元素(x=2)的数组。然后用stringwow
将这些元素连接起来,这样就可以:
空元素+“哇”+空元素+“哇”+空元素=“wowow”数组(x+1)创建一个包含3个元素的数组,所有元素都包含空元素。
稍后,您将这些空元素与字符串wow连接,从而返回:
empty+“哇”+empty+“哇”+empty=>wowow这是一个创建数组的函数。 诸如此类的事情,你真的应该在询问之前在你的控制台中尝试一下 这些事情可以在Javascript中完成,尽管它们有点违反直觉:
function A() {
return new Array();
}
let myA1 = A(); // returns an array
let myA2 = new A(); // also returns an array.
编辑:
原因是Javascript是一种原型语言,“类”只是我们新开发的一个函数。如果该函数未返回任何内容,则在本例中,我们会得到一个新的实例,如果该函数返回其他对象,则会返回该对象。所做的是创建一个大小为x+1(本例中为3)的数组。并用str变量值填充每个单元格 在这段代码中,我创建了一个大小为3的单元格数组,并用字符串“yolo”填充它们
fiddle示例:请将输出粘贴为文本,而不是图像。
数组
,即使没有新实例,也会创建一个新实例。有没有都一样。如果您创建一个以数字作为第一个参数的数组,则会创建一个具有所述长度但没有元素的新数组。可能与@T.J.Crowder完全相同。我正在检查MDN,因为它是我通常的参考位置,我无法从那里获得它。我很高兴知道你提供的另一个消息来源。
$(document).ready(function(){
var str = "yolo";
console.log(Array(4).join(str));
})