2011-05-19 260 views
1
function compare(a, b) { 
    return isNaN(a) || isNaN(b) ? a > b : +a > +b; 
} 
var c = compare(10,5); 
alert("C value ==?"+c); 

我在理解上述腳本時遇到了困難。如何從compare()返回布爾值truefalse。如何生成布爾值true。請解釋。布爾值如何從此語句返回true或false

+0

條件寫入是否正確?它似乎說,如果a或b不是數字,如果a大於b似乎沒有道理,或者我在這裏丟失了某些東西,那麼返回true? – 2011-05-19 01:32:15

回答

2
return isNaN(a) || isNaN(b) ? a > b : +a > +b; 

這檢查,看看是否任何ab不是數字(IsNan)。如果任一測試結果爲真,則返回a > b的結果;如果它們都不是NAN,則返回+a > +b的結果。閱讀Javascript的ternary(有條件)運營商的文檔。

,以確保它很清楚,測試是:

如果不是數字或B不是 號,返回true,如果一個大 比B,否則嘗試轉換和 b都爲數字並返回是否 比b

注意,整個表達式是沒有意義的,因爲它要返回相等測試,即使是試圖轉換後有什麼可能不是數字更大。

+0

這是不正確的。 '+'運算符被重載,在OP的上下文中它充當*一元加運算符*(ECMA-262§11.4.6)。它將以下標識符轉換爲數字(如果可以),它不一定會將其轉換爲正值。 – RobG 2011-05-19 02:11:34

+0

@RobG:感謝您的糾正。我會嘗試糾正我的答案以反映它。 – 2011-05-19 02:59:11

1

那麼return語句有兩種可能的方式返回值,兩者都是布爾:

return isNaN(a) || isNaN(b) ? a > b : +a > +b; 

可以返回這個(一個布爾值)

isNaN(a) 

還是這個(也是布爾 - 它是一個比較運算符)

+a > +b; 
+2

它不會返回'isNan(a)'。該表達式僅用於確定是否返回'a> b'或'+ a> + b'的結果。 – RobG 2011-05-19 02:14:37

1

這是普通的javascript(而不是jQuery)代碼。

這可以被改寫爲

if (isNaN(a) || isNaN(b)) { 
    return a > b; 
} else { 
    return +a > +b; 
} 

如果任何一個參數是不是一個數字(如果條款),則該函數將仍然嘗試着做一些比較,並返回結果。否則它會將它們強制爲數字,然後進行比較。也許參數的順序應該改變...

+1

是否有任何地方提及jQuery? :) – alex 2011-05-19 01:33:17

+0

@alex:問題最初是用'jquery'和'jquery-ui'標記的。 – Jeremy 2011-05-19 01:38:43

+0

@Jeremy我應該看看未來的編輯歷史:) – alex 2011-05-19 01:47:47