63

给定以下代码:

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

4 回答 4

91

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

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 = 1andvar b = 2是语句,而不是表达式,因此不能用逗号分隔。您必须在此处使用分号。

(注:你可以说

var a = 1, b = 2;

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

同样,你不能说

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

因为这里表达式的右边一定是表达式,不是语句,;是用来分隔语句的。内部分号必须是逗号。(话说回来,这段代码一开始就非常尴尬和不寻常,所以你可能根本不应该这样做!)

从文体的角度来看,逗号运算符很少使用,而且非常晦涩难懂,可能会绊倒相当称职的 JavaScript 编码人员。因此,我强烈建议不要使用它,而是遵循 JavaScript 中关于使用分号终止语句的既定约定,即使使用逗号分隔每个用作语句的表达式是等效的并且在语法上是合法的。

希望这可以帮助!

于 2013-03-18T20:02:52.283 回答
32

不,逗号有三种含义。

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

两个例子;

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

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

MDN

逗号运算符什么时候有用?

于 2013-03-18T20:00:37.263 回答
10

真的没关系。据我所知,使用逗号对速度没有好处。

只需使用您喜欢的任何东西:)

这就是JavaScript - The Good Parts必须说的:

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

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

于 2013-03-18T19:59:30.163 回答
3

最好始终与惯例保持一致。要么全是分号,要么全是逗号,我相信你更喜欢在任何地方使用分号而不是逗号。

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

于 2013-03-18T19:59:42.877 回答