带有多个逗号分隔值的return语句

时间:2012-04-23 16:33:48

标签: javascript

  

可能重复:
  Javascript syntax: what comma means?

这种模式会带来什么回报?它是如何工作的?

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

之前我没有遇到过这种模式,但一直在查看Bing Maps Ajax Control,并多次注意到这种模式。

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

3 个答案:

答案 0 :(得分:127)

这是comma operator。它评估其左侧操作数,抛出结果,评估其右侧操作数,并将其作为结果值。它是从左到右关联的,因此a, b, c评估a,然后评估b,然后评估c,并将c的结果作为其值。< / p>

在您的示例中,它完全像:

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

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

因为你已经说过它是一个缩小器:如果这是条件块的一部分,缩小器可能获得的非常小可能的好处:它可以保存一个或两个字符。如果我们假设长形看起来像这样:

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

...使用逗号运算符,minifier可以执行此操作(63个字符):

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

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

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

...在不更改代码功能的情况下,如果以下内容是}或其他适当的字符(或文件结尾)来触发{{3} } 在末尾。否则,它需要第一个;,但仍然可以保存一个字符。

答案 1 :(得分:9)

comma operator评估(从左到右)表达式,然后返回最后一个结果,在这种情况下将是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;
}

答案 2 :(得分:1)

在你的例子中,myobj应该被返回到执行之前的所有内容

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