我已經seend下面的代碼...使用比較參數if語句
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)
我已經seend下面的代碼...使用比較參數if語句
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)
xhr && xhr.abort && xhr.abort();
定義可以被重新寫爲
if (xhr) {
if (xhr.abort) {
xhr.abort();
}
}
即,如果xhr
被定義(不是 'falsy'),並且如果xhr
具有限定的abort
鍵,然後致電xhr.abort();
如果該行代替:
xhr.abort();
然後,如果xhr
是undefined
,則ReferenceError
將被拋出。如果xhr.abort
不是函數(或undefined
),則會引發TypeError
。
第二行是等同於:
if (xhr && xhr.abort && typeof xhr.abort === 'function') {
xhr.abort();
}
的QUnit
檢查,如果前面的語句的第一部分出現故障便會失敗(這意味着XHR從來沒有定義,或者它是null
)。
**不等價**,&&隱式轉換爲'Boolean',因此您檢查的是'falsy'值,不一定是函數。 – azz
是的,但除此之外,如果我們只是檢查被定義的xhr.abort,並且我們試圖調用它而不是一個函數,我們會得到一個錯誤。 –
@ KonstantinD-Infragistics OP中的代碼並不檢查'xhr.abort'是否是一個函數。它只檢查它是否存在。因此,第二行和你寫的內容並不相同。 –
很難說什麼ok函數沒有任何代碼... –
這是一個短路評估的例子。它從左到右進行評估,如果'&&'之前的部分返回true,則只執行'&&'右側的操作。 –