可以在元素列表的开头,中间或末尾省略数组元素。每当元素列表中的逗号前面没有AssignmentExpression(即开头的逗号或另一个逗号后面的逗号)时,缺少的数组元素会增加数组的长度并增加后续元素的索引。
但
var a = [b=1,,]
console.log(a.length) //2
逗号前面有AssignmentExpression(b = 1),缺少的数组元素提供长度。我想知道为什么?
ECMAScript说没有贡献长度。我想知道逗号如何不贡献长度,除了在数组的末尾
答案 0 :(得分:2)
逗号跟随计数元素,它不标记一个元素的开头。 逗号是数组中的最后一个东西是没有意义的,因为已经考虑了前面的元素。
你遗漏了解释的最后一句话,似乎回答了你的问题:
如果某个元素在数组的末尾被省略,则该元素不会影响数组的长度。
它还说数组的开头或中间的空元素会影响数组长度(因为它们跟随计算的元素,即使它们是空的)
如果你只有这个:[,]
你的长度为1,这是因为在逗号之前的数组开头是空的未定义元素。
你的例子:
var a = [b=1,,]
只有2个元素而不是3个元素,因为第二个逗号后面没有任何内容。第一个逗号之后的空元素会有所贡献,因为它最后不,后面是第二个逗号,表示那里有一个索引,其中没有任何内容。这就像写[b=1, undefined]
。第二个逗号实际上是一个错字。