当前位置:  开发笔记 > 编程语言 > 正文

","在javascript中的对象中的单个元素的末尾是非法的?

如何解决《","在javascript中的对象中的单个元素的末尾是非法的?》经验,为你挑选了2个好方法。

我想知道为什么在JavaScript数组中将逗号放在单个元素的末尾是合法的:

var array = [
    'foo', // no error in IDE
]

将它放在对象中单个元素的末尾是非法的(至少我的IDE - WebStorm - 正在标记错误):

var object = {
    'foo': 'bar', // error in IDE
}

这在JavaScript中是非法的吗?



1> ChaosPandion..:

在ECMAScript 5规范中,它是合法的:

ObjectLiteral : 
    { } 
    { PropertyNameAndValueList } 
    { PropertyNameAndValueList , } 

这在ECMAScript 3中是非法的.

ObjectLiteral : 
    { } 
    { PropertyNameAndValueList } 

我认为让这样的事情变得合法是合法的.

function getItems() {
    return {
        one : 1,
        two : 2,
        three : 3,
        //four : 4,
    };
}

而不是这个:

function getItems() {
    return {
        one : 1,
        two : 2,
        three : 3//,
        //four : 4,
    };
}

节省一些程序员的时间.



2> casablanca..:

除了ChaosPandion所提到的,,在对象的末尾和数组之间存在重要的区别.数组中的空逗号(技术上称为elisions)undefined在相应位置插入元素; 这会增加数组的长度,但值会增加undefined.

编辑:感谢ChaosPandion和CMS指出错误.我只是重读了规范,实际上单个尾随逗号不会增加长度,但是数组中间的任何额外的尾随逗号或任何逗号都会增加长度.

例如,[ 1,2,, ]是一个长度为3且与之相同的数组[ 1, 2, undefined ].同样,[ 1,,,2 ]是一个长度为4且与之相同的数组[ 1, undefined, undefined, 2 ].

奇怪的是,当涉及到JavaScript的这个"特性"时,IE在数组中使用尾随逗号(它计算额外元素)正确行为,而Firefox忽略最后一个未定义元素.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有