Javascript &&;两个变量之间的外部条件

Javascript &&;两个变量之间的外部条件,javascript,Javascript,我最近在facebook上运行的一个脚本上看到了这段代码: __d("Shaka", [], function a(b, c, d, e, f, g) { c.__markCompiled && c.__markCompiled(); var h = {}; 对于以C#为主要开发经验背景的人,我忍不住注意到C.u-markCompiled&&C.u-markCompiled()行至少看起来很奇怪。我自己编写了很多javascript,但我唯一使用的地方是在条件语

我最近在facebook上运行的一个脚本上看到了这段代码:

__d("Shaka", [], function a(b, c, d, e, f, g) {
    c.__markCompiled && c.__markCompiled();
    var h = {};
对于以C#为主要开发经验背景的人,我忍不住注意到
C.u-markCompiled&&C.u-markCompiled()行至少看起来很奇怪。我自己编写了很多javascript,但我唯一使用的地方是在条件语句中,比如
if
s、
for
while
等。。这句话的作用是什么?它背后的逻辑是什么?

c.__markCompiled && c.__markCompiled();
实际上与

if (c.__markCompiled) c.__markCompiled();

&
运算符仅在左侧的求值为真实值时才求值其右侧。
&
运算符与
if
语句中使用的
&
运算符相同

如果将
中的所有元素与
和&
进行相互比较,则在遇到
假值时,它将立即停止

这永远不会被执行

false && some_function();
每次都会执行此操作

true && some_function();
您甚至可以测试一个函数,如果为true,则调用其他函数

test_me() && call_if_true();
这与:

if (test_me()) { call_if_true(); }
你也可以发疯:

test1() && test2() && some_thing() && something_else();
最后一个将在其达到相当于
false
的值时停止


Javascript是一种美…

这是if(c.\u markCompiled)c.\u markCompiled()的缩写形式。这种形式在小型JS中非常常见。在这里,它肯定没有任何意义,因为它既不是条件检查,也不是可重用变量的赋值。它只是执行一些函数,
&&
只是
逻辑和
运算符。当任何从左到右的论点都是错误的时,表达式求值将停止。@iuliu.net的可能重复:那么它就不是真的。@AkshayKhandelwal:我认为应该由你来详细说明“对我来说似乎是不正确的”。@AkshayKhandelwal这一行的实质是说“求值如下:c_umarkcompiled返回true,c.u markCompiled()返回true”。除了我们没有做任何评估。我们不在乎这两件事是否都是真的。我们关心的是,如果表达式的左侧失败,则右侧不会执行。不需要执行它-我们已经知道表达式将返回false。因此,执行右侧函数的唯一方法是如果左侧为true。@AkshayKhandelwal该行上有一个“条件”。在将对象属性用作函数引用并调用它之前,代码会检查它是否存在。这是为了避免未定义的
不是一个函数
错误。@Pointy:天哪。我现在才注意到左边不是电话。:)术语是“短路”。你大错特错了。Javascript是人类已知的最混乱的语言之一。:)两个不同位置的“塞吉奥”。。。真是太好了!另外,谢谢你的“短路”。每天学习新东西很好!