6

这个流行演讲的启发,我想弄清楚一些与创建数组有关的问题。假设我正在创建新数组:

Array(3)

在控制台中我得到:

[undefined, undefined, undefined]

这很明显。假设我正在加入该数组:

Array(3).join()

作为回应,我得到:

",,"

这也很容易理解,因为我想这是三个空字符串,用逗号分隔。但是当我想做的时候:

Array(3).join("lorem")

我得到的字符串只有两次重复的“lorem”:

"loremlorem"

为什么这个词有两个而不是三个重复?

4

5 回答 5

10

join使用作为连接器传递的内容将元素连接在一起。所以你有三个空字符串“围绕” lorems:

|lorem|lorem|

如果您不使用空数组,可能会更明显:

var arr = [1, 2, 3, 4, 5]; // Like Array(5), except not sparse

arr.join('-and-'); // 1-and-2-and-3-and-4-and-5

顺便说一句,您的第一个示例join输出不正确。应该是,,",,"。(取决于输出格式。)

于 2012-09-11T18:44:03.497 回答
3

Join 需要一个分隔符。“lorem”取代了之前的逗号。

于 2012-09-11T18:44:24.310 回答
2

Join 将数组中的元素与指定的分隔符组合在一起。

因此,由于有 3 个元素,您只需要 2 个分隔符(第 1 和第 2 之间,以及第 2 和第 3 之间)。

var a = [1,2,3];
a.join(','); //1,2,3
a.join('test'); // 1test2test3
于 2012-09-11T18:44:16.697 回答
2

查看加入文档。

您传递给 join 函数的内容将用作数组元素之间的分隔符。当你用 声明一个数组时Array(3),你正在创建一个包含三个元素的数组。join 方法在这些元素之间插入分隔符,因此您只会看到两个“lorem”。

其实你看到的是:blank lorem blank lorem blank. 其中空白是数组的空元素。

尝试执行以下操作:

var fruits = ["banana", "orange", "apple"]
fruits.join("lorem")

它会打印

bananaloremorangeloremapple

于 2012-09-11T18:52:51.200 回答
1

如果您有一个由 3 个成员组成的数组,则是成员之间.join的填充符,因此应该只有两个连接字符串。

因此,您的第二个输出是正确的。

您使用 , 的第一个输出.join()似乎是显示错误或测试代码的误传。

的默认值为.join()a ",",因此:

new Array(3).join();

应该给你这个:

",,"

您显示的输出:

[, ,]

将更有可能来自仅new Array(3)输入console没有.join().

于 2012-09-11T18:44:17.070 回答