受this popular speech的启发我想弄清楚与创建数组有关的一些问题。假设我正在使用:
创建新数组 Array(3)
在控制台我得到:
[undefined, undefined, undefined]
这很明显。假设我正在加入该阵列:
Array(3).join()
作为回应我得到了:
",,"
这也是可以理解的,因为这些是三个空字符串,用逗号分隔,我想。但是当我想要做的时候:
Array(3).join("lorem")
我收到的字符串中只有两个重复的“lorem”:
"loremlorem"
为什么有两个,而不是三个重复的那个词?
答案 0 :(得分:8)
join
使用作为joiner传递的内容将元素连接在一起。所以你有三个空字符串“围绕”lorem
s:
|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
输出是不正确的。它应该是,,
或",,"
。 (取决于输出格式。)
答案 1 :(得分:3)
加入需要一个分隔符。 “lorem”取代了以前的逗号。
答案 2 :(得分:2)
Join将数组中的元素与指定的分隔符组合在一起。
所以,由于有3个元素,你只需要2个分隔符(在第1和第2之间,在第2和第3之间)。
var a = [1,2,3];
a.join(','); //1,2,3
a.join('test'); // 1test2test3
答案 3 :(得分:2)
查看join文档。
您传递给join函数的内容将用作数组元素之间的分隔符。当您使用Array(3)
声明数组时,您将创建一个包含三个元素的数组。 join方法在这些元素之间插入分隔符,因此您只能看到两个“lorem”。
实际上,您看到的是:blank lorem blank lorem blank
。其中blank是数组的空元素。
尝试执行以下操作:
var fruits = ["banana", "orange", "apple"]
fruits.join("lorem")
会打印
bananaloremorangeloremapple
答案 4 :(得分:1)
如果您有一个包含3个成员的数组,则.join
是成员之间的填充,因此应该只有两个连接字符串。
因此,您的第二个输出是正确的。
使用.join()
的第一个输出,似乎是显示错误或对您的测试代码的错误陈述。
.join()
的默认值为","
,因此:
new Array(3).join();
应该给你这个:
",,"
您显示的输出:
[, ,]
如果没有new Array(3)
,只需在console
中输入.join()
,就更有可能。