反对Javascript中引导逗号的客观原因

时间:2013-09-19 11:55:01

标签: javascript coding-style

我最近加入了一个项目,其中使用引号作为标准。

虽然我理解这种风格的原因(线条的安全评论),但它非常不方便(温和地说)。

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

P.S。示例代码:

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. 各种工具/实用程序中的潜在错误,因为这些工具很可能是在定期放置的逗号上实现和测试的。示例:使用前导逗号

  4. 编译JavaScript代码时,Sencha CMD存在错误

    更新: 我们根据共同的风格自动格式化了所有项目(具体来说,根据谷歌风格指南:http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)。 代码看起来明显更好,并且所有工具都按预期工作(IDE,Optimizers,Builders(Sencha CMD),语法验证器,......)。 这是大公司内的一个大项目,所以这不是一个微不足道的决定。此外,它损失了清晰的CVS历史 - 但最终它是值得的。

4 个答案:

答案 0 :(得分:5)

我不知道这应该如何做出更安全的线条评论。当然,如果您评论最后一项,则避免使用尾随逗号,但如果您对第一项进行评论,则会得到一个引导逗号。中间项目你是安全的。

如果您始终使用尾随逗号,则可以在不获取前导逗号的情况下对第一项进行注释,但对最后一项进行注释将留下尾随逗号。

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

答案 1 :(得分:4)

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

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

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

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

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

这是Haskell

的默认代码样式

首先命令您永远不会错过逗号,请参阅here

答案 2 :(得分: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();

然后将其插入更改样式的formatter。 (Original Question

然后它看起来像这样:

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();

答案 3 :(得分:1)

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

不过,我更喜欢这种理智的格式(适用于所有现代浏览器甚至是旧版本):

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

[
    'foo',
    'bar',
    'baz',
]