【问题标题】:JS statement separator with commasJS 语句用逗号分隔
【发布时间】:2014-02-24 23:21:24
【问题描述】:

我找到了以下 js 示例,但对语法感到困惑。请注意,语句用逗号而不是分号分隔。逗号是 js 中有效的语句分隔符吗?我以前没见过。

    $('selector').each(function () {

            this.onclick = function () {
                this.select();
            },

            this.onblur = function () {
            },

            this.onfocus = function () {
            },

            this.onkeyup = function () {
            }
    });

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    逗号充当单个表达式语句中表达式之间的分隔符。因此,那(如果它已经完成而不是在“onkeyup”函数之后被切断)只是一个单一的表达式语句。

    真的没有理由编写这样的代码,或者至少没有很好的理由。在这种特殊情况下,它与一系列用分号分隔的单独表达式语句的效果基本相同。

    逗号“运算符”在许多情况下是有问题的,但有时很有用:

    var index, len;
    for (index = 0, len = list.length; index < len; ++index) { ... }
    

    例如。它允许将一个以上的表达式(通常是赋值)放到只允许一个表达式的语法语言环境中。在我看来,这确实是句法弱点的标志。

    【讨论】:

    • 注意:如果有人对逗号运算符感兴趣 - 请参阅 this
    • @dzejkej 学习 JS 细微差别的好网站!这种风格让我想起了过去的 C Primer 和 C++ Primer Plus 书籍。
    • 这也很有趣 for (var i = 0, ii = ary.length, a = ary[i]; i &lt; ii; ++i, a = ary[i]) 注意 final-expression 语句中的赋值
    • 我刚刚找到了这样编码的原因:for()exp1,exp2;for(){exp1;exp2} 短我在一个缩小的 JS 中找到了它
    • 您的示例中使用的逗号实际上不是运算符:它们是var 语句的一部分,而不是表达式的一部分。 for 循环中的逗号运算符示例如下:var i = 1, j = 1; for (; i &lt; 10; i++, j *= 2) {}
    【解决方案2】:

    每个赋值实际上是一个表达式(不是语句);和表达式可以连接成一个更大的表达式,其最终值只是最后一个子表达式的值;例如

    alert(  (w=1+1, x=2+3, y=3+3, z=4+4)  ); // shows 8
    

    虽然您显示的代码是有效的,但我认为这不是一个好的模式。我会将其更改为分号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多