使用if语句之外的compare参数

时间:2013-11-04 13:25:07

标签: javascript jquery

我已经看到以下代码......

var xhr = $.ajax({...});
xhr && xhr.abort && xhr.abort();
ok(xhr, "XHR object is not null or undefined");

并努力理解第二行xhr && xhr.abort && xhr.abort();

我想了解它的意思。

ok( bool , string )

的定义

2 个答案:

答案 0 :(得分:2)

xhr && xhr.abort && xhr.abort();

可以重写为

if (xhr) {
   if (xhr.abort) {
       xhr.abort();
   }
}

也就是说,如果定义了xhr(而不是'falsy'),并且xhr定义了abort键,那么请调用xhr.abort();

如果换行:

xhr.abort();

如果xhrundefined,则会抛出ReferenceError。如果xhr.abort不是函数(或undefined),则会抛出TypeError

答案 1 :(得分:0)

第二行相当于:

if (xhr && xhr.abort && typeof xhr.abort === 'function') {
    xhr.abort();
}

如果前一个语句的第一部分失败(意味着xhr从未被定义或者是QUnit),则null检查将失败。