【问题标题】:javaScript: Can a comma occur after the last set of values in an array?javaScript:在数组中的最后一组值之后可以出现逗号吗?
【发布时间】:2011-07-05 13:59:13
【问题描述】:

我想知道 javascript 中数组尾随的逗号是否有效?

var settings = {
    'foo'  : oof,
    'bar' : rab,
};

var settings = {
    'foo'  : oof,
    'bar' : rab
};

请注意,第二个示例在最后一个键/值之后没有逗号。

【问题讨论】:

标签: javascript jquery arrays


【解决方案1】:

至少关于对象文字(问题的标题提到了数组,但示例是对象文字),这取决于您的 js 运行的位置。对象字面量中的尾随逗号在 ES5 中有效。尽管尾随逗号可能会在网络上(在 IE 中)引起问题,但大多数压缩程序还是会删除它们。

http://www.2ality.com/2011/06/object-literal-comma.html

http://dontkry.com/posts/code/trailing-commas.html

【讨论】:

    【解决方案2】:

    从历史上看,ES3 在定义对象字面量时不允许尾随逗号。这是 IE 做对的一件事,但大多数其他 Bowser 供应商都违反了规范并允许它。所以从技术上讲,它在支持它的其他浏览器中的一个错误。在 ES3 中,ObjectLiteral 被定义为,

    对象字面量 { } { PropertyNameAndValueList }

    后来ES5 解决了这个问题,方法是与大多数人一起使用,并通过将尾随逗号放入规范中使其合法化。现在ObjectLiteral 被定义为,

    对象字面量 { } { PropertyNameAndValueList } { 属性名称和值列表 , }

    注意末尾的逗号。

    虽然尾随逗号是在对象字面量中定义的,但根据 ES5,它仍然不允许在 JSON 中使用。所以虽然下面的对象字面量是有效的,

    { foo: "bar", }
    

    下面的 JSON 不是,

    '{ "foo": "bar", }'

    JSONObject 的语法是,

    JSON对象 { } { JSONMemberList } JSON成员列表 JSON成员 JSONMemberList , JSONMember JSON成员 JSONString : JSON值

    简而言之,如果您不想担心规范或浏览器的怪癖,请不要添加尾随逗号。

    【讨论】:

    • sign.. IE 总是会受到指责,即使它做对了 :(
    【解决方案3】:

    大多数浏览器和实现都允许尾随逗号,大的 BUT 是 “Internet Explorer”。

    大多数 InternetExplorer 版本中的尾随逗号会导致 BIG 麻烦。它会抛出 wierdcrazy、奇怪和不合理的 errors .. 你不知道你在哪里!这可怕,你会陷入深度和严重的抑郁。这种疾病还有一个名字,曾经被称为“厄运的邪恶逗号”。

    结论:永远……永远!在 Javascript 中使用尾随逗号。

    【讨论】:

    • 谢谢 jAndy,我现在知道“生态”了。它在语义上是不正确的,还是只是 ie 中的一个错误?
    • Internet Explorer 是 厄运的 eval 浏览器。 ;)
    • @Gumbo, @superUntitle:就像 Anurag 提到的那样,在这种情况下,它实际上是 ES 规范的一个非常正确的实现(但是,即使错误消息完全没用)。看起来更像是他们不小心做的:-)
    • 我知道已经晚了,但万一有人发现了这一点。更现代的 IE (IE9/10) 版本将完美地满足这一点。
    • 如果为 NodeJS(使用 v8)开发,我更喜欢始终使用尾随逗号,因为在 VCS 的差异中添加/删除属性/方法时它看起来更好:-) 如果寻找兼容性表:@ 987654321@
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多