104

可能重复:
Javascript 语法:逗号是什么意思?

这个模式返回了什么?它是如何工作的?

return myfunc(), myobj.myvar = someobj.prop, myobj

我以前没有遇到过这种模式,但一直在查看 Bing 地图 Ajax 控件并且多次注意到这种模式。

据我了解,不会返回多个值。那么这个模式有什么作用呢?返回什么?这种模式有什么好处?

4

3 回答 3

182

这是逗号运算符。它评估其左侧操作数,将结果丢弃,评估其右侧操作数,并将其作为其结果值。它是从左到右关联的,因此a, b, c计算a, then b, then c,并将结果c作为其值。

在您的示例中,它就像:

myfunc();
myobj.myvar = someobj.prop;
return myobj;

有些人真的更喜欢在一条线上做事,即使没有客观理由。您给出的示例没有任何好处,实际上它令人困惑,因为它看起来像前两位与最终将返回的值相关,而事实并非如此。 (在你告诉我们它是缩小代码之前,我写道;显然,人类不清楚只是源代码中的问题,而不是缩小代码。)

既然你说它是一个缩小器:如果这是一个条件块的一部分,缩小器可能获得的非常小的好处是:它可以保存一个或两个字符。如果我们假设长格式如下所示:

if (someCondition) {
    myfunc();
    myobj.myvar = someobj.prop;
    return myobj;
}

...使用逗号运算符,缩小器可以做到这一点(63 个字符):

if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj

...而不是这个(65 个字符):

if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj}

...在不更改代码功能的情况下,如果后面是一个}或其他适当的字符(或文件结尾)以在末尾触发自动分号插入。否则,它将需要;第一个字符,但这仍然可以节省一个字符。

于 2012-04-23T16:36:28.480 回答
12

逗号运算符评估(从左到右)表达式,然后返回最后一个结果,在这种情况下将是myobj标识符的评估。

如果这对你很重要,你可以这样做消除一些花括号......

if (true)
    ;// do something
else
    return myfunc(), myobj.myvar = someobj.prop, myobj

……相对于……

if (true)
    ;// do something
else {
    myfunc();
    myobj.myvar = someobj.prop;
    return  myobj;
}
于 2012-04-23T16:36:35.437 回答
1

在您的示例中,应该返回 myobj ,因为之前的每件事都被执行

myfunc();
myobj.myvar = someobj.prop;
return myobj;
于 2012-04-23T16:37:40.847 回答