Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多么奇怪的语法啊?_Javascript - Fatal编程技术网

Javascript 多么奇怪的语法啊?

Javascript 多么奇怪的语法啊?,javascript,Javascript,我在JQuery站点上发现了未知的代码构造。经过一些格式化后,它看起来像: function (a,c) { c==null && (c=a,a=null); return arguments.length>0 ? this.bind(b,a,c) : this.trigger(b) } 函数的第一行是什么意思?这是一个技巧还是标准的JS代码构造?这是一个技巧,它使用布尔短路求值,仅在第一个求值为真时才执行第二个一半。Pe

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

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

函数的第一行是什么意思?这是一个技巧还是标准的JS代码构造?

这是一个技巧,它使用布尔短路求值,仅在第一个求值为真时才执行第二个一半。Perl通常有以下特点:

<something> or die

那是一种丑陋的写作方式

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

这利用了这样一个事实,即布尔
&&
的第二部分将在且仅当第一部分的计算结果为true时执行。

表达式使用两个JavaScript功能:

  • 布尔运算符的短路评估:in,
    a&&(b)相当于
  • 分组赋值表达式:in,
    a=b,b=c
    相当于
    {a=b;b=c}
因此,表达式等效于:

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

它是Java、php、Javascript和其他任何语言的标准。如果您要查看jQuery代码,请查看开发副本,而不是缩小副本。到开发副本。@Tom:JavaScript中的不同于其他语言中的C语法。哇,那些代码缩略器很有攻击性-如果(C==null){C=a;a=null},它只比
短一个字符
逗号使两个命令都不需要分号就可以执行。这反过来又允许两个语句在一行中执行,这比if语句节省了字符数。@Gunslinger:实际上快了多少?Python还允许您使用
a或B
作为类似
a!=null&&A==真?A:B
。虽然在Python中,您可以将其称为
A if A!=无且A==True,否则B
。不过,我可能遗漏了Python使用的一些微妙之处。@JAB在JavaScriptor中这是可能的,非常难看。而且对许多开发者来说非常不直观。你能找到写它的人并踢他们吗。@Schroedingers猫:因为变量名为
a
b
c
,这段代码可能是由代码缩小器生成的。使用。丑陋?这解释了很多,不是吗;D
if (c == null) {
    c = a
    a = null
}