JavaScript 末尾逗号问题

JavaScript 中数组与对象定义时最后一个元素后如果跟了一个逗号,那么可能引起问题。一个简单的例子是 [2, 3].length 等于 2,而 [2, 3,].length 在 Firefox/Chrome 中仍为 2,但在 IE (旧版)中等于 3 (它会认为最后有一个元素值为 undefined)。有关这个问题,还可以参考 Dan Lee 这篇有趣的博文,以及 Drupal 的一个 Bug 报告。而我最初是在看 GitHub 上 Hotot 的一个 Pull Request 时开始注意到这个情况。

末尾逗号的写法 C/C++ 程序员应该很习惯。末尾逗号能在改变对象中元素顺序、使用代码生成数组、拷贝代码时带来方便。然而在旧的 JavaScript 实现中,这是不允许的。根据这篇博文,IE8 里已经修复了这个 "bug"。另外,ECMAScript 5 规范里已经容许了末尾逗号,目前新版本的 Firefox/Chrome 对这个标准有良好的支持。(参见这里

值得注意的是,JSON 规范中要求不能有末尾逗号的,否则就是格式错误。JSON 不等于 JS 对象。因此,使用代码生成 JSON 格式的字符串时,采用前置逗号是更好的实践。(参考 stackoverflow 上的这个问题

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s