function compare(a, b) {
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
}
var c = compare(10,5);
alert("C value ==?"+c);
我在理解上述腳本時遇到了困難。如何從compare()返回布爾值true
或false
。如何生成布爾值true
。請解釋。布爾值如何從此語句返回true或false
function compare(a, b) {
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
}
var c = compare(10,5);
alert("C value ==?"+c);
我在理解上述腳本時遇到了困難。如何從compare()返回布爾值true
或false
。如何生成布爾值true
。請解釋。布爾值如何從此語句返回true或false
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
這檢查,看看是否任何a
或b
不是數字(IsNan
)。如果任一測試結果爲真,則返回a > b
的結果;如果它們都不是NAN,則返回+a > +b
的結果。閱讀Javascript的ternary(有條件)運營商的文檔。
,以確保它很清楚,測試是:
如果不是數字或B不是 號,返回true,如果一個大 比B,否則嘗試轉換和 b都爲數字並返回是否 比b
注意,整個表達式是沒有意義的,因爲它要返回相等測試,即使是試圖轉換後有什麼可能不是數字更大。
這是不正確的。 '+'運算符被重載,在OP的上下文中它充當*一元加運算符*(ECMA-262§11.4.6)。它將以下標識符轉換爲數字(如果可以),它不一定會將其轉換爲正值。 – RobG 2011-05-19 02:11:34
@RobG:感謝您的糾正。我會嘗試糾正我的答案以反映它。 – 2011-05-19 02:59:11
那麼return語句有兩種可能的方式返回值,兩者都是布爾:
return isNaN(a) || isNaN(b) ? a > b : +a > +b;
可以返回這個(一個布爾值)
isNaN(a)
還是這個(也是布爾 - 它是一個比較運算符)
+a > +b;
它不會返回'isNan(a)'。該表達式僅用於確定是否返回'a> b'或'+ a> + b'的結果。 – RobG 2011-05-19 02:14:37
這是普通的javascript(而不是jQuery)代碼。
這可以被改寫爲
if (isNaN(a) || isNaN(b)) {
return a > b;
} else {
return +a > +b;
}
如果任何一個參數是不是一個數字(如果條款),則該函數將仍然嘗試着做一些比較,並返回結果。否則它會將它們強制爲數字,然後進行比較。也許參數的順序應該改變...
條件寫入是否正確?它似乎說,如果a或b不是數字,如果a大於b似乎沒有道理,或者我在這裏丟失了某些東西,那麼返回true? – 2011-05-19 01:32:15