我想知道为什么在JavaScript数组中将逗号放在单个元素的末尾是合法的:
var array = [
'foo', // no error in IDE
]
Run Code Online (Sandbox Code Playgroud)
将它放在对象中单个元素的末尾是非法的(至少我的IDE - WebStorm - 正在标记错误):
var object = {
'foo': 'bar', // error in IDE
}
Run Code Online (Sandbox Code Playgroud)
这在JavaScript中是非法的吗?
Cha*_*ion 17
在ECMAScript 5规范中,它是合法的:
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
这在ECMAScript 3中是非法的.
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
我认为让这样的事情变得合法是合法的.
function getItems() {
return {
one : 1,
two : 2,
three : 3,
//four : 4,
};
}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
function getItems() {
return {
one : 1,
two : 2,
three : 3//,
//four : 4,
};
}
Run Code Online (Sandbox Code Playgroud)
节省一些程序员的时间.
除了ChaosPandion所提到的,,在对象的末尾和数组之间存在重要的区别.数组中的空逗号(技术上称为elisions)undefined在相应位置插入元素; 这会增加数组的长度,但值会增加undefined.
编辑:感谢ChaosPandion和CMS指出错误.我只是重读了规范,实际上单个尾随逗号不会增加长度,但是数组中间的任何额外的尾随逗号或任何逗号都会增加长度.
例如,[ 1,2,, ]是一个长度为3且与之相同的数组[ 1, 2, undefined ].同样,[ 1,,,2 ]是一个长度为4且与之相同的数组[ 1, undefined, undefined, 2 ].
奇怪的是,当涉及到JavaScript的这个"特性"时,IE在数组中使用尾随逗号(它计算额外元素)正确行为,而Firefox忽略最后一个未定义元素.
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |