【问题标题】:Use of commas versus semicolons?使用逗号还是分号?
【发布时间】:2013-03-18 19:57:07
【问题描述】:

给定以下代码:

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

【问题讨论】:

  • @SteveValliere,除了这个问题与 Java 无关。
  • @SteveValliere 这是一个javascript问题。语法将是无效的 java
  • 注意作为一个结束标记,它们并不总是等价的。这个 sn-p:var a=1,b=2 将用一个 var 语句声明 2 个变量。但是在var a=1;b=2 现在b 不再是var 语句的一部分,而是创建了一个隐式全局b
  • @The_asMan- 可以将此问题解释为“什么更好?”问题,这在 SO 社区中通常是不受欢迎的。我们喜欢有明确是或否答案的问题。询问最佳实践通常属于“这是一个很好的问题,但它不属于这个网站”的类别。 (另外,这不是我的近距离投票。)
  • 它可能会关闭,但我一直在想同样的事情。一个及时的帖子。谢谢。

标签: javascript syntax


【解决方案1】:

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

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 中关于使用分号终止语句的既定约定,即使使用逗号分隔每个用作语句的表达式是等效的并且在语法上是合法的。

希望这会有所帮助!

【讨论】:

  • 这一切怎么可能在 5 分钟内写完? O_O
【解决方案2】:

不,逗号有三种含义。

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

两个例子;

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

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

MDN

When is the comma operator useful?

【讨论】:

  • 3.函数声明和函数调用中的单独参数。
  • 是的,但这还是第三个意思。
  • 如果我们很挑剔,它也被用于对象和数组字面量表示法,以及未来 ES6+ 数据结构中可能的其他东西。为了不必使这个答案与语言保持同步,我个人会将其更改为“在数据结构和函数中明显使用逗号之外......”
【解决方案3】:

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

随便用你喜欢的吧:)

这就是 JavaScript - The Good Parts 不得不说的:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 2019-08-19
      • 2016-01-12
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多