为什么[,]在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();