逗号和分号的使用区别?

68

给定以下代码:

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';   
}

请注意,作为行尾标记,它们并不总是等价的。这段代码:var a=1,b=2将使用一个var语句声明两个变量。但是在var a=1;b=2中,现在b不再是var语句的一部分,并且创建了一个隐式全局变量b - Alex Wayne
@The_asMan- 有人可能会将这个问题解释为一个“哪个更好?”的问题,这在SO社区通常是不被赞同的。我们喜欢有明确肯定或否定答案的问题。询问最佳实践通常属于“这是个好问题,但它不适合在这个网站上提出。”的类别。(另外,那不是我的关闭投票。) - templatetypedef
4个回答

99

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

a = 1, b = 2, c = 3

意思是“先执行 a = 1,然后执行 b = 2,最后将表达式 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中使用分号终止语句的约定,即使使用逗号将用作语句的每个表达式分隔开也是等效的且符合语法规则。

68
用5分钟写完这么多,这可能吗? O_O - VisioN

33

不,逗号有三个含义。

  1. 在变量声明中,它只是让你省略每个变量前面的var
  2. 在表达式中,"逗号操作符从左到右评估其两个操作数,并返回第二个操作数的值。"
  3. 在函数声明和函数调用中分隔参数,但这对每个程序员来说都是显而易见的。

示例为两个;

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

注意,在var语句中的逗号不是逗号运算符,因为它不存在于表达式中。相反,它是var语句中的特殊字符,用于将多个变量组合成一个变量。实际上,这个逗号的行为几乎与逗号运算符相同。 MDN 逗号运算符何时有用?

2
  1. 在函数声明和函数调用中分开参数。
- VisioN
是的,但那仍然是第三个意思。 - VisioN
1
如果我们要挑剔的话,逗号也用于对象和数组字面量表示法,以及可能在未来的ES6+数据结构中使用。为了不必时刻更新这个答案,我个人会将其改为类似于“除了在数据结构和函数中显而易见的使用逗号之外...”。 - Philip Walton

11

没有关系。据我所知,在速度方面,使用逗号没有任何优势。

只需使用您喜欢的方式 :)

JavaScript - The Good Parts》这本书有这样的说法:

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

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


3

最好始终保持符合惯例。用分号或逗号,要么全用分号,要么全用逗号,我相信你喜欢在所有地方都使用分号。

同时也不会提高速度,所以没有什么可担心的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接