是否可以使用逗号运算符故意跳过数组元素?

时间:2011-09-03 20:04:58

标签: javascript

var array = [,, "cat", "dog"];

这将创建一个包含两个空值的数组(以便稍后我可以使用它们)。如果不做慢而乏味的话,我想不出任何其他方法可以做到这一点array[2] = "cat"; array[3] = ...这是一个很好的方法来做到这一点。或者是否有另一种推荐的做法来模仿这种能力。

3 个答案:

答案 0 :(得分:4)

是。 hole 将不会被定义,但会影响数组长度。

The spec [ref]允许:

  

可以在元素列表的开头,中间或末尾省略数组元素。每当一个逗号在   元素列表之前没有AssignmentExpression(即开头或之后的逗号   逗号),缺少的数组元素有助于数组的长度并增加索引   后续要素。未定义Elided数组元素。

然而,正如pimvdb所指出的那样,它可能并不一定意味着这是一个好习惯。

答案 1 :(得分:3)

第一次的代码看起来像是一个错误。

如果你真的想要undefined值,那么明确表达它是有益的。

var array = [undefined,undefined, "cat", "dog"];

不是更好,但您也可以执行以下操作。

var array = ["cat", "dog"];
array.unshift(undefined,undefined);

它绝对有效但不一定干燥清晰。

答案 2 :(得分:1)

是的,没关系。基本上你正在做的是声明一个包含四个元素的数组,但不必为前两个输入undefined。但是,如果希望长度等于4,则必须采用另一种方式。

您的数组似乎是一个元素列表,其中索引到值的映射很重要。如果是这种情况,您可以考虑使用一个对象,它(我认为)会更整洁:

var obj = { 2: "foo", 3: "bar"};
alert(obj[2]);
// later
obj[4] = "baz";
alert(obj[4]);