Javascript逗号语法

时间:2011-01-14 20:15:16

标签: javascript

为什么这么多开发人员用这种方式写逗号?

var npm = module.exports = new EventEmitter
  , config = require("./lib/config")
  , set = require("./lib/utils/set");

不是这样吗?

var npm = module.exports = new EventEmitter,
    config = require("./lib/config"),
    set = require("./lib/utils/set");

5 个答案:

答案 0 :(得分:7)

他们在行的开头用“,”编写它们,以便更容易维护代码(添加行或删除/注释掉行)。

鉴于此:

var npm = module.exports = new EventEmitter
  , config = require("./lib/config")
  , set = require("./lib/utils/set");

这样做更干净,更容易:

var npm = module.exports = new EventEmitter
//  , config = require("./lib/config")
  , set = require("./lib/utils/set");

以及添加这样的新行:

var npm = module.exports = new EventEmitter
  , config = require("./lib/config")
  , anothervalue = require("./lib/aval")
  , anothervalue2 = require("./lib/aval2")
  , set = require("./lib/utils/set");

答案 1 :(得分:1)

我之前从未在JS中看到过这种模式,所以我不确定是否有许多开发人员使用它,但我猜他们会这样做,所以变量名称是对齐的,以强调var实际上在示例代码中定义了三个变量。

如果是这种情况,那么只使用var三次会更清楚(并且不那么奇怪):

var npm = module.exports = new EventEmitter;
var config = require("./lib/config");
var set = require("./lib/utils/set");

答案 2 :(得分:1)

这严格来说是程序员特定的语法偏好。我知道很多DBA都喜欢这种方法,而我更喜欢自己的尾随逗号。除了个人偏好/教育之外,这并没有真正的区别。

答案 3 :(得分:1)

编辑2:以上问题促使我划伤了一段困扰我的痒。经过相当多的反复思考后,我为引导逗号提出了一个很好的理由:很容易发现缺少逗号。这是一个可能令人讨厌的错误来源,因为编译器只会添加一个分号,而不是抱怨,因此会非常显着地改变含义:

var a = foo(),
    b = bar()  // Oops...
    c = baz(); // Ouch!

第三行不再在当前范围内初始化新变量。它分配给外部作用域中的现有变量,或者如果没有,则初始化新的全局变量。

这并不能解释在JSON中使用前导逗号。也许它只是由菲亚特继承。

尽管如此,我仍然赞成单独的声明,这使得它简单而安全。

我会为了后代留下我的咆哮。


我同意它到处都是。几乎每一个我读过的第二个库都使用这个约定。坦率地说,我不明白。

尾随逗号会使评论小组的最后一行感到尴尬......

var //a = foo(), easy
    b = bar(),
    c = baz();

var a = foo(),
    b = bar()/*, awkward
    c = baz()*/;

......而领先的逗号使得第一行和最后一行都很尴尬......

var /*a = foo() awkward
  , */b = bar()
  , c = baz();

var a = foo()
  , b = bar()/* awkward
  , c = baz()*/;

这是进步吗?

(当然可以通过观察分号是可选的来赢得一个便宜的点,但这只能以避免最佳实践为代价来实现平价。)

更糟糕的是,领先的逗号也用于JSON。这是由Express生成的package.json。

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.10"
    , "jade"   : ">= 0.0.1"
  }
}

这是一个PITA,因为大多数编辑都不喜欢让兄弟姐妹的线条彼此不同。请注意,组的第一行缩进多于以下行。

使用引人注目的咒语使我感到毫无意义的影响,导致问题而不解决任何问题。我能想到的唯一一个有任何优点的论点就是领先的逗号相互排列;不太引人注目。

幸运的是,CoffeeScript正在接管世界,这使得这个问题没有实际意义(它甚至使配置失败了JSON。)

编辑:我忘了提到我实际上并不喜欢上述场景的尾随逗号。我认为宣布个体变量是最有意义的。它干净,规则,可以很容易地评论出单个项目。

var a = foo();
var b = bar();
var c = baz();

答案 4 :(得分:0)

var npm = module.exports = new EventEmitter
config = require("./lib/config") // ,
//anothervalue = require("./lib/aval"),
//anothervalue2 = require("./lib/aval2"),
set = require("./lib/utils/set");
看到额外的“//”...您必须在末尾的现有行添加“//”并将其添加到下一行......