为什么[,, .. join('')长度比数组长度小1?

时间:2019-04-27 15:48:54

标签: javascript

通过加入string产生的var arr = [,,]长度背后的原因是什么,像这样:var str = arr.join(' ')arr的长度少一个。

var literal_arr = [,,],
    joined_literal_arr = literal_arr.join(' '),
    constructor_arr = new Array(2),
    joined_constructor_arr = new Array(2).join(' ');

console.log("Literal array notation length = ", literal_arr.length);

console.log("Joined literal array notation string length = ", joined_literal_arr.length);

console.log("Constructor array notation length = ", constructor_arr.length);

console.log("Joined constructor notation string length = ", joined_constructor_arr.length); 

3 个答案:

答案 0 :(得分:4)

根据MDN docs

  

如果元素未定义或为空,则将其转换为空字符串

在您的情况下,您正在创建一个具有特定长度且没有任何值的数组(它将为undefined)。因此,在连接时将有length - 1个分隔符(因为undefined已被视为空字符串)意味着length - 1个空格(' ')。

答案 1 :(得分:0)

哦! 我认为join()方法用于将数组(或类似数组的对象)的所有元素组合成字符串并返回此行。

例如。

var elements = ['Fire', 'Air', 'Water'];
console.log(elements.join(''));

//预期输出:“火-空气-水”

然后... 如果您尝试合并空白数组,Join()仅返回合并字符串。 因此,在您的示例中,包含一个合并字符串,并且返回长度-1。 如果尝试使用长度为3的数组,它将返回长度为2。

答案 2 :(得分:-1)

  

这很简单,因为.join将使用separator作为参数连接数组元素

     

它不会在最后一个元素之后和第一个元素之前添加separator

     

仅将separator放在元素之间。

     

希望这可以消除您的困惑!