通过加入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);
答案 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
放在元素之间。希望这可以消除您的困惑!