这段代码“obj&& obj.myFunction();”在javascript中做什么?

时间:2015-08-07 14:51:58

标签: javascript jquery

我正在研究一个项目,我发现在某些函数的末尾被称为jquery延迟对象,如下所示:

obj && obj.resolve();

&&的目的是什么?自我放置的对象在开始时的目的是什么(obj)?

首先,我认为这样的召唤是这样的:

如果obj存在 - >然后调用该函数(resolve)...但是我用一个简单的对象测试了代码并且它抛出了一个错误:

var b = {
    a:function(){alert('ok')}
};

a && a.a(); // ReferenceError: a is not defined

b && b.a(); // works...

4 个答案:

答案 0 :(得分:3)

它使用$(".GN").click(function() { var yourVal = $(this).data('gnval'); $.ajax({ method: "POST", url: "test.action", // correct url ? data: { gnval: yourVal } }); }); 作为"后卫"。在用它做某事之前,它基本上检查&&是否存在。

说明:任何objfalsenull,空字符串,数字零都归类为"虚假值"。除了那些之外的任何东西都是" truthy值"。

undefined等运营商从左到右进行评估。如果&&左侧的值是真实的,它会尝试评估右侧的值。在这种情况下,如果&&是真实的,它会评估obj,基本上执行它。

答案 1 :(得分:3)

代码说'如果obj被实例化且不为空,请致电obj.resolve()'。

它的工作原因是Javascript将0nullundefined视为false,将任何其他值视为true

答案 2 :(得分:0)

这是

的简写
if (obj) {
    obj.resolve();
}

答案 3 :(得分:0)

if(obj) {
}

检查obj是否未定义。

&& 

表示如果第一个表达式为false(即:如果obj在您的情况下未定义),请不要再检查第二个参数,在您的情况下是obj.resolve();

如果obj是undefined

,它会阻止你在obj上调用崩溃的方法