Javascript 为什么要在对象文本中的键值对后面留下逗号?

Javascript 为什么要在对象文本中的键值对后面留下逗号?,javascript,object-literal,Javascript,Object Literal,我在看gruntjs,还看了一些用于配置Grunt任务的JSON示例 以下是JSON的一个示例: grunt.initConfig({ concat: { foo: { // concat task "foo" target options and files go here. }, bar: { // concat task "bar" target options and files go here. }, }, uglif

我在看gruntjs,还看了一些用于配置Grunt任务的JSON示例

以下是JSON的一个示例:

grunt.initConfig({
  concat: {
    foo: {
      // concat task "foo" target options and files go here.
    },
    bar: {
      // concat task "bar" target options and files go here.
    },
  },
  uglify: {
    bar: {
      // uglify task "bar" target options and files go here.
    },
  },
});
如您所见,每个条形图属性后面都有一个“额外”逗号。我在Chrome中尝试了这个符号,它是有效的。虽然它是有效的,但我不会使用这个符号,但为什么人们会使用它呢

我在Chrome中尝试了这个符号,它是有效的

仅仅因为它在Chrome中工作并不意味着它是有效的。它之所以有效是因为:-)

我不会用这个符号,但是为什么人们会用它呢

使复制和粘贴更容易。您可以只附加新属性,而不必关心其他工作。在程序代码中,这是一种不好的做法,因为较旧的浏览器(尤其是IE)和,但在配置文件中(即在已知环境中),它使生活更轻松

我在Chrome中尝试了这个符号,它是有效的

仅仅因为它在Chrome中工作并不意味着它是有效的。它之所以有效是因为:-)

我不会用这个符号,但是为什么人们会用它呢


使复制和粘贴更容易。您可以只附加新属性,而不必关心其他工作。这在程序代码中是一种不好的做法,因为较旧的浏览器(尤其是IE)和它使生活变得更简单。

这样,您就可以在列表中追加内容,而不必担心前一行是否有逗号。@WaleedKhan另外,如果您添加后面的行,则无需编辑前一行以添加尾随逗号,从而使修订历史记录保持整洁(可能重复a)它不是JSON,因为在JSON中,此语法无效。b) 基于ES>=5,在纯JS中有效;c) 这里的标题和第一句都是无效的。请从帖子和标题中删除“JSON”,我可能会删除我的否决票。这篇文章与JSON完全无关。因此,您可以将其附加到列表中,而不必担心前一行是否有逗号。@WaleedKhan如果您添加后面的行,则不需要编辑前一行来添加后面的逗号,因此,将修订历史记录保持整洁(可能是a)的重复,它不是JSON,因为在JSON中,此语法无效。b) 基于ES>=5,在纯JS中有效;c) 这里的标题和第一句都是无效的。请从帖子和标题中删除“JSON”,我可能会删除我的否决票。这篇文章绝对与JSON无关。后面的逗号一直都是有效的。ES3规范并没有禁止它们,根据ES5规范:“11.1.4:Edition 5澄清了这样一个事实,即ArrayInitialiser末尾的尾随逗号不会增加数组的长度。这不是对Edition 3的语义更改,但一些实现以前可能会误解这一点。”@格伦:这个问题是关于对象初始化器的,不是关于数组的:-)哦,你是对的,但是这个看起来像是对的,而且似乎说尾随逗号是可选的:你应该提到区分的优点。尾随逗号一直是有效的。ES3规范并没有禁止它们,根据ES5规范:“11.1.4:Edition 5澄清了这样一个事实,即ArrayInitialiser末尾的尾随逗号不会增加数组的长度。这不是对Edition 3的语义更改,但一些实现以前可能会误解这一点。”@格伦:这个问题是关于对象初始化器的,不是关于数组的:-)哦,你是对的,但是这个看起来像是对的,而且似乎说后面的逗号是可选的:你应该提到区分的优点。