You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无new关键字调用Array()的机制及Array(x+1).join()实现原理

嘿,这个用数组join实现字符串重复的写法确实有点绕,我来给你把背后的逻辑拆解得明明白白~

拆解Array(x+1).join(str)的实现逻辑

1. 为什么Array(x+1).join(str)能实现字符串重复?

先从数组的join()方法说起:join(separator)的核心作用是把数组所有元素转成字符串,再用separator把它们串起来。最关键的点是:分隔符是插在两个元素之间的,所以分隔符出现的次数 = 数组长度 - 1。

拿你的例子来说:repeat("wow", 2)里调用了Array(3),它会创建一个长度为3的稀疏数组,控制台输出就是(3) [empty × 3]。这种稀疏数组里的empty元素,转成字符串时会变成空字符串""。当你调用join("wow")时,实际的拼接过程是:

"" + "wow" + "" + "wow" + ""

前后的空字符串对结果没有影响,最终就得到了"wowwow"——刚好是"wow"重复2次。

如果换成Array(x)(也就是Array(2)),数组长度是2,分隔符只会出现1次,拼接后就是"" + "wow" + "",结果自然只有1个"wow",达不到你要的重复2次的效果。

2. 不用new调用Array()是什么情况?

其实Array()作为构造函数,用不用new关键字,行为完全一致:

  • 当传入单个数字参数时,比如Array(3)或new Array(3),都会创建一个长度为该数字的稀疏数组;
  • 当传入多个参数时,比如Array("a", "b")或new Array("a", "b"),都会创建包含这些参数的普通数组。

这是因为JS引擎对Array函数做了特殊处理:如果没有用new调用,它会自动在内部创建一个新的Array实例并返回,和new Array()的结果没有任何区别。

3. 补充:字符串的repeat()方法

你提到的字符串repeat()方法(比如"wow".repeat(2))是ES6新增的API,逻辑非常直观——直接指定重复次数就能得到结果。而Array(x+1).join(str)是ES6之前,没有原生repeat方法时的一种“奇技淫巧”,利用数组join的特性来模拟字符串重复。

内容的提问来源于stack exchange,提问作者bakrall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:37:39