使用逗号与分号?

时间:2013-03-18 19:57:07

标签: javascript syntax

给出以下代码:

var fn = function () {
    var x = 'x',
    y = 'y';
    this.a = 'a',
    this.b = 'b',
    this.c = 'c';
    this.d = 'd',
    this.e = 'e';   
}

可以看出,两者都是混合的。

使用其中一个会有什么好处?

我的理解是分号是结束声明的。并且逗号应该用于将多个声明串起来。

那么说这个例子那么应该只有两个分号吗?

var fn = function () {
    var x = 'x',
    y = 'y';
    this.a = 'a',
    this.b = 'b',
    this.c = 'c',
    this.d = 'd',
    this.e = 'e';   
}

4 个答案:

答案 0 :(得分:74)

逗号运算符是可以在表达式中使用的运算符。它用于分离多个不同的表达式,其含义是“计算以下所有表达式,然后生成最终表达式的值”。例如:

a = 1, b = 2, c = 3

表示“评估a = 1,然后b = 2,然后c = 3,然后评估表达式c = 3的值。

分号不是运算符,不能在表达式中使用。它用作JavaScript语法的一部分,用于标记被视为语句的表达式的结尾。例如,你可以说

a = 1; b = 2; c = 3;

这意味着“按顺序要做三个语句:将第一个表达式计算为第一个语句,将第二个表达式计算为第二个语句,将第三个表达式计算为第三个语句。”

在这方面,两者并不是完全可以互换的。例如,你不能写

var a = 1, var b = 2;

因为var a = 1var b = 2是语句,而不是表达式,因此不能用逗号分隔。你必须在这里使用分号。

(注意:你可以说

var a = 1, b = 2;

因为该语言特别允许使用逗号作为声明语句语法的一部分。这里,逗号不用作运算符。)

同样,你不能说

a = (b = 1; c = 2);

因为这里表达式的右侧必须是表达式,而不是语句,;用于分隔语句。内部分号必须是逗号。 (然后,这个代码首先非常尴尬和不寻常,所以你可能根本不应该这样做!)

从风格的角度来看,逗号运算符很少被使用,并且模糊不清以至于它可能会使合理的JavaScript编码器绊倒。因此,我强烈建议不要使用它,而是遵循JavaScript中关于使用分号来终止语句的既定约定,即使使用逗号分隔出每个用作语句的表达式都是等效的和语法上合法的。 / p>

希望这有帮助!

答案 1 :(得分:28)

不,逗号有三个含义。

  1. 使用变量声明,只允许在每个变量之前省略var
  2. 使用表达式,“逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。”
  3. 函数声明和函数调用中的单独参数,但对于每个程序员来说都应该是显而易见的。
  4. 两个例子;

    alert((2,3)); //3
    
      

    请注意,var语句中的逗号不是逗号运算符,因为它在表达式中不存在。相反,它是var语句中的一个特殊字符,它将多个组合成一个。实际上,该逗号的行为几乎与逗号运算符相同。

    MDN

    When is the comma operator useful?

答案 2 :(得分:10)

真的没关系。据我所知,使用逗号没有速度优势。

只需使用您喜欢的任何内容:)

这就是 JavaScript - The Good Parts 所说的:

  

逗号运算符可能导致过于棘手的表达式。它可以   还掩盖了一些编程错误。

     

JSLint希望看到逗号用作分隔符,但不能用作分隔符   运算符(除了初始化和递增部分之外)   声明)。它不期望在数组中看到elided元素   文字。不应使用额外的逗号。不应出现逗号   在数组文字或对象文字的最后一个元素之后,因为   它可能会被某些浏览器误解。

答案 3 :(得分:4)

最好始终与惯例保持一致。它可以是所有的冒号,也可以是所有的逗号,我相信你更喜欢在任何地方使用冒号而不是逗号。

也没有速度增益,所以没有什么可担心的。