什么奇怪的语法?

IT技术 javascript
2021-03-09 14:07:16

我在 JQuery 站点上发现了未知的代码构造。经过一些格式化后,它看起来像:

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

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

3个回答

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

<something> or die

如果第一条语句失败,则程序结束。

读作

if (c == null) { c = a; a = null; }
这反过来又允许两个语句在一行中执行,这比 if 语句节省了字符。
2021-04-21 14:07:16
逗号使两个命令无需分号即可执行。
2021-04-22 14:07:16
@JAB 在 javascript 中是可能的
2021-05-01 14:07:16
Python 还允许您将其A or B用作类似于A != null && A == true ? A : B. 虽然在 Python 中你会说A if A != None and A == True else B. 不过,我可能会遗漏 Python 用法的一些微妙之处。
2021-05-06 14:07:16
@Gunslinger_:实际上快了多少?
2021-05-20 14:07:16

这是一种丑陋的写作方式

if(c==null) {
  c = a;
  a = null;
}

这利用了这样一个事实,即&&当且仅当第一部分的计算结果为真时,才会执行boolean 的第二部分

@Schroedingers Cat:由于变量名为a, bc因此此代码可能是由代码压缩器生成的。jQuery 目前似乎使用UglifyJS
2021-04-30 14:07:16
非常难看。对许多开发人员来说非常不直观。你能找到写它的人并踢他们吗?
2021-05-08 14:07:16
丑化?这说明了很多,不是吗?;D
2021-05-16 14:07:16

该表达式使用两个 JavaScript 特性:

因此,该表达式等效于:

if (c == null) {
    c = a
    a = null
}