Javascript 为什么要关心Node.js中的尾随逗号?

Javascript 为什么要关心Node.js中的尾随逗号?,javascript,node.js,Javascript,Node.js,在大多数Node.js库中,人们会特别注意删除对象最后一对键属性后的尾随逗号: var test = { key1: 123, key2: 456, key3: 789 }; 这在编辑代码时会产生一些问题,例如,要交换最后两个键值对,还必须添加一个逗号并删除一个逗号。有些人将逗号移到下一行,这解决了最后一个元素的问题,但也使代码更难阅读(IMHO): 另一方面,据我所知,JavaScript中的尾随逗号只在某些IE浏览器中产生问题。所以我想知道,在Node.js中不使用

在大多数Node.js库中,人们会特别注意删除对象最后一对键属性后的尾随逗号:

var test = {
    key1: 123,
    key2: 456,
    key3: 789
};
这在编辑代码时会产生一些问题,例如,要交换最后两个键值对,还必须添加一个逗号并删除一个逗号。有些人将逗号移到下一行,这解决了最后一个元素的问题,但也使代码更难阅读(IMHO):

另一方面,据我所知,JavaScript中的尾随逗号只在某些IE浏览器中产生问题。所以我想知道,在Node.js中不使用尾随逗号编写哈希有什么技术原因吗?(如下图所示:)


不,没有技术上的理由这样做

然而,我从来没有将尾部comas放在后面,因为我认为它有助于更干净的代码。可能有些人也有来自web开发的习惯,正如您所提到的,由于IE,您需要小心这些习惯


编辑:这个答案在2012年就有了意义,但今天,随着主要的浏览器支持和Babel等针对较旧浏览器的工具的出现,我认为后面的逗号应该是每个人的默认设置。好处是它使添加新行更容易,相关的Git diff更干净。

首先,我认为尾随逗号很难看,所以我只在必要时使用它们(只有一个元素的python元组),而前导逗号更难看

除此之外,还有一个永远不要使用它们的理由:如果您正在编写的代码是针对node.js的,或者是针对可能不喜欢它们的IE的客户端的,那么您不必太在意


在node.js中省略它们没有任何技术原因。更新:我已经改变了对此的立场。我认为尾随逗号很好,因为您不必更改两行来添加属性,而diff只显示添加的行

旧的和错误的:

我找到了一个不使用尾随逗号的好理由,但这并不是node.js特有的:

:

这种格式的好处是差异友好性:添加或删除 属性或数组成员几乎从不接触除 一个实际发生变化的地方,而后面的逗号语法 几乎总是用两行来获得正确的逗号

相反,更改的行上不会有任何不相关的内容, 这可以极大地帮助扫描提交


我非常喜欢对象中的alpha排序键。这有很多好处。最主要的是两个相似物体的视觉比较。所有为JavaScript(我见过)提供调试支持的现代IDE都会对属性进行alpha排序。因此,当您将断点处的对象与代码进行比较时,这只会使比较更容易

在对象的最后一对上有一个尾随逗号,可以很容易地对对象中的对进行排序:选择所有行并点击编辑器中的排序键。如果最后一对不再是最后一对,则无需进一步添加/删除逗号

我同意所有其他的评论(起初)它使你的代码变得“不干净”或更丑陋。我发现,在使用了尾随逗号之后,我很快就习惯了,几周后,我开始喜欢这样看


作为人类,我们最习惯于我们习惯的东西。鉴于我们看到的大多数代码都没有我们最喜欢的尾随逗号。几个星期后,你可能会发现你更喜欢用逗号结尾。您可能会发现它更实用。

它可能不会改善您的运行时或诸如此类的情况,但使用与版本控制相关的尾随逗号具有优势

如果您不使用它,git将检测到一行被修改,另一行被添加。但如果您使用它,git将检测到只添加了一行:

使用结尾的逗号:

不带使用尾随逗号:


另外,它在您的代码中显示了一点专注,我们不是为编译器编写代码,而是为其他程序员编写代码,主要是为我们自己编写代码。举个好例子。有很多技术原因,它被称为“未来证明”代码可以在新版本的ES上运行,其中尾随逗号是一种语法error@Raynos你有好的消息来源吗?我发现了矛盾的东西@Xeon06哦,ES5规范确实说它是合法的。然后我很有兴趣看到这种情绪。我总是觉得缺少尾随逗号很难看。在这一点上,唯一重要的地方是节点需要实际JSON的地方。例如,在package.json中,不能有尾随逗号。因此,当您使用coffee脚本时,如果省略它们,您会高兴得多。请注意,Node.jsvar test = { key1: 123 , key2: 456 , key3: 789 };
var test = {
    key1: 123,
    key2: 456,
    key3: 789,        
};