多么奇怪的语法?

Ser*_*lov 12 javascript

我发现JQuery网站上的代码构造未知.经过一些格式化,它看起来像:

function (a,c) {
    c==null && (c=a,a=null);
    return arguments.length>0
        ? this.bind(b,a,c) 
        : this.trigger(b)
}
Run Code Online (Sandbox Code Playgroud)

该函数的第一行是什么意思?是任何技巧或标准JS代码构造?

das*_*ndy 15

这是一个使用布尔短路评估的技巧,如果第一个评估为真,则仅执行后半部分.Perl有这个常见的:

<something> or die
Run Code Online (Sandbox Code Playgroud)

如果第一个语句失败,程序结束.

读它为

if (c == null) { c = a; a = null; }
Run Code Online (Sandbox Code Playgroud)

  • 逗号使两个命令都执行而不需要分号. (2认同)
  • 这反过来允许*两个*语句在**单行**中执行,这比if语句节省了一个字符. (2认同)
  • @Gunslinger_:实际上快了多少? (2认同)

Mch*_*chl 12

这是一种丑陋的写作方式

if(c==null) {
  c = a;
  a = null;
}
Run Code Online (Sandbox Code Playgroud)

这利用了以下事实:&&当且仅当第一部分的计算结果为true时,才会执行布尔的第二部分.

  • @Schroedingers Cat:因为变量名为`a`,`b`,`c`,这段代码可能是由代码缩小器生成的.[jQuery目前似乎](https://github.com/jquery/jquery/blob/master/Makefile#L8)使用[UglifyJS](https://github.com/mishoo/UglifyJS). (10认同)
  • 十分难看。对于许多开发人员来说非常不直观。你能找到写这篇文章的人并踢掉他们吗? (2认同)
  • 丑化?这解释了很多,不是吗?;D (2认同)