为什么[,]在javascript中是有效的数组文字?

为什么[,]在javascript中是有效的数组文字?,javascript,grammar,Javascript,Grammar,由于某些原因,[,]在javascript中是一个有效的数组文本。它是一个1元素数组[,]也可以工作,依此类推。我正在查看语法以了解为什么会进行解析,但据我所知,不应该允许出现空表达式 有什么想法吗?我似乎在看一个较旧的语言规范 将阵列并行定义为: ArrayLiteral : [ Elision opt ] [ ElementList ] [ ElementList , Elisionopt ] Elision : , Elision , 省略规则似

由于某些原因,
[,]
在javascript中是一个有效的数组文本。它是一个1元素数组<代码>[,]也可以工作,依此类推。我正在查看语法以了解为什么会进行解析,但据我所知,不应该允许出现空表达式


有什么想法吗?

我似乎在看一个较旧的语言规范

将阵列并行定义为:

ArrayLiteral :
    [ Elision opt ]
    [ ElementList ]
    [ ElementList , Elisionopt ]

Elision :
    ,
    Elision ,
省略规则似乎定义了这种情况

在某种意义上,它是数组元素的“占位符”

我在处理主要逗号时遇到了这个问题:

var x = [
  , something
  , somethingElse
  , 2
] 
我想知道为什么第一个元素的
未定义


谢谢你和德里克朕會功夫

哇,这是个很好的问题。 我以前从来没有注意过

我做了一把小提琴,进一步“利用”了这种现象:

我认为这与javascript处理未定义变量的方式有关。 Javascript对空变量使用“null”或“undefined”。我猜这只是为了防止代码崩溃,不像Java,Java必须给所有调用的变量赋值

它变得更疯狂,未定义不是保留字。实际上,您可以使用以下方法覆盖它(在本地范围内):

有关未定义的详细信息:

为什么空表达式不起作用?似乎我应该猜到,
[,]==[未定义,未定义]
@Johan-
[,]
将与
[未定义]
相同,因为最后一个带空项的逗号被忽略。您在看哪种语法?你应该看看第63页底部的Or,你一定搞错了。
Array
初始化器是在ECMAScript Edition 3中引入的,产品
ArrayLiteral:[Elision\u opt]
Elision:,
位于的第40页。要清楚,Elision不会创建值为undefined的成员,它只是增加了长度,没有成员
var a=['a','b']
创建一个长度为3且在位置1处没有成员的数组,即a
中的
'1'返回false。IE有一个尾随省略的问题,它将长度增加了一倍:
[,]。长度应该是1,但IE说是2。
function replicateMozilla()
{
    var undefined = '2';

    console.log(undefined);
}

replicateMozilla();