JavaScript语句分隔符:逗号

28
我发现了以下 JavaScript 示例代码,但对其语法感到困惑。请注意,该代码使用逗号分隔语句而不是分号。在 JavaScript 中,逗号是否是有效的语句分隔符?我以前从未见过这种写法。
    $('selector').each(function () {

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

            this.onblur = function () {
            },

            this.onfocus = function () {
            },

            this.onkeyup = function () {
            }
    });
2个回答

28

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

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

逗号“运算符”在许多情况下都是值得怀疑的,但有时也很有用:

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

举个例子,它允许将多个表达式(通常是赋值)组合成一个语法上只允许单个表达式的环境中。在我看来,这实际上是语法上的弱点。


6
注意:如果有人对逗号操作符感兴趣,请查看此链接 - kubetz
2
@dzejkej 是一个学习JS细节的好网站!这种风格让我想起了早年的C Primer和C++ Primer Plus书籍。 - John Livermore
此外,for (var i = 0, ii = ary.length, a = ary[i]; i < ii; ++i, a = ary[i]) 中的最终表达式语句中的赋值也很有趣。 - Alfonso de la Osa
1
我刚刚发现一个编写代码的理由:for()exp1,exp2;for(){exp1;exp2} 更短。我在一个压缩过的 JS 中发现了它。 - aldo.roman.nurena
1
你例子中使用的逗号实际上不是运算符:它们是var语句的一部分,而不是表达式的一部分。在for循环中使用逗号运算符的一个示例如下所示:var i = 1, j = 1; for (; i < 10; i++, j *= 2) {} - aaaaaa
显示剩余2条评论

11

每个赋值语句实际上都是一个表达式(而不是语句),并且这些表达式可以连接成一个更大的表达式,在这个更大的表达式中,最终的值就是最后一个子表达式的值;例如:

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

尽管你展示的代码是有效的,但我认为这不是一个好的模式可供遵循。我建议将其改为分号。


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