3

我最近加入了一个使用前导逗号作为标准的项目。

虽然我理解这种风格的原因(行的安全注释),但它非常不方便(委婉地说)。

我有一种强烈的感觉,这不仅仅是关于品味,我需要比“我不喜欢它”更好的理由来说服团队不要使用这种风格。

ps示例代码:

function cls(){

    var prop = {
         a:'a'
        ,b:'b'
        ,c:'c'
        ,d:'d'
    };

    var arr = [
         11
        ,12
        ,13
        ,14
    ];

    var  x=1
        ,y=2
        ,z=3;

    return {

        f:function(){       
            alert(prop.a);      
        }

        , g:function(){
            alert(arr[0]);
        }

        , h: function(){
            alert(x);
        }

    };
}    


var test = cls();
test.f();test.g();test.h();

到目前为止的客观原因(部分来自答案,部分来自我的):

  1. 这种风格非常少见,尤其是在 JavaScript 学习材料和框架中。项目的新手很可能会感到不舒服,以及需要处理不同格式的项目的开发人员

  2. IDE 中的大多数自动格式化工具都不尊重这种风格(默认情况下或通过配置)

  3. 各种工具/实用程序中的潜在错误,因为这些工具最有可能在定期放置的逗号上实现和测试。示例:Sencha CMD 在编译带有前导逗号的 JavaScript 代码时存在错误

更新:我们根据通用样式对所有项目进行了自动格式化(具体来说,根据谷歌样式指南:http: //google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)。代码看起来好多了,所有工具都按预期工作(IDE、优化器、构建器(Sencha CMD)、语法验证器……)。这是大公司内部的一个大项目,所以这不是一个微不足道的决定。此外,它还损失了清晰的 CVS 历史记录——但最终还是值得的。

4

4 回答 4

5

我认为没关系。当您想添加或删除某些内容时,会导致您减少拼写错误。

更新一行即可,其他行不需要添加逗号或删除逗号。

var prop = {
    a: 'a'
  , b: 'b'
  , c: 'c'
  , d: 'd'
}

var arr = [
    11
  , 12
  , 13
  , 14
]

var x=1
  , y=2
  , z=3

这是Haskell的默认代码风格

命令优先,您永远不会错过逗号,请参见此处

于 2014-08-20T02:22:21.393 回答
5

我不明白这应该如何更安全地评论行。当然,如果您评论最后一项,您会避免使用尾随逗号,但如果您评论第一项,您会得到一个前导逗号。无论哪种方式,中间物品都是安全的。

如果您始终使用尾随逗号,您可以评论第一个项目而不使用前导逗号,但评论最后一个项目将留下一个尾随逗号。

不同之处在于 js 对象文字中通常接受尾随逗号,而前导逗号则不接受。

于 2013-09-19T12:09:46.583 回答
3

如果你真的讨厌这种风格,只需正常编码:

function cls() {
    var prop = {
        a: 'a',
        b: 'b',
        c: 'c',
        d: 'd'
    };

    var arr = [
        11, 12, 13, 14
    ];

    var x = 1,
        y = 2,
        z = 3;

    return {

        f: function () {
            alert(prop.a);
        },
        g: function () {
            alert(arr[0]);
        },
        h: function () {
            alert(x);
        }

    };
}

var test = cls();
test.f();
test.g();
test.h();

然后将其插入更改样式的格式化程序。原始问题

然后它看起来像这样:

function cls() {
    var prop = {
        a: 'a'
        , b: 'b'
        , c: 'c'
        , d: 'd'
    };

    var arr = [
    11, 12, 13, 14];

    var x = 1
        , y = 2
        , z = 3;

    return {

        f: function() {
            alert(prop.a);
        },
        g: function() {
            alert(arr[0]);
        },
        h: function() {
            alert(x);
        }

    };
}

var test = cls();
test.f();
test.g();
test.h();
于 2013-09-19T12:03:01.953 回答
2

这种格式确实会产生更清晰的差异,因为添加到列表或字典或声明中不会影响包含现有元素的行。

不过,我更喜欢这种健全的格式(适用于所有现代浏览器,甚至一些旧浏览器):

{
    foo: 1,
    bar: 2,
    baz: 3,
}

[
    'foo',
    'bar',
    'baz',
]
于 2015-02-04T03:51:32.977 回答