2013-05-11 97 views
0

我正在讀一本關於使用node,backbone和mongodb構建web應用程序的書。我從書中拿到樣本,並遇到一段代碼,令我困惑。JavaScript邏輯運算符作爲函數的參數

var login = function(email, password, callback) { 
    var shaSum = crypto.createHash('sha256'); 
    shaSum.update(password); 
    Account.findOne({email:email,password:shaSum.digest('hex')},function(err,doc){ 
     callback(null!=doc); 
    }); 
    }; 

看回調函數零點的說法!=醫生,我知道,在JavaScript的平均空不等於文檔,但怎麼來的,你可以在使用它作爲參數。

+5

'空= doc'被作爲一個布爾值,並將結果傳遞給回調,僅此而已。這與'var docIsNull = null!= doc; callback(docIsNull);' – Ian 2013-05-11 18:33:15

+1

^^^^^他說,評估一個表達式會返回一個布爾值,不管它是否在單獨的變量中發生,或者直接無關緊要,它仍然將結果布爾值傳遞給回調函數。 – adeneo 2013-05-11 18:37:15

+1

@Ian:您的評論應該被接受爲答案。 :) – mithunsatheesh 2013-05-11 18:37:58

回答

-2

看來是在進行如下。當該函數被調用時,nul從doc繼承了一個真值,然後在回調函數的處理中使用該函數。這裏發生的事情是,當null被認爲不等於doc時,回調函數將被處理,因爲知道null不等於doc。如果我們對這個功能有更多的瞭解,發生了什麼事情,我可以更加細緻,但到目前爲止,我只能說正在發生的事情。

+1

這是完全錯誤的。 'null'是JavaScript中的關鍵字和原始值。 – 2013-05-11 19:07:35

4

null!=doc被評估爲布爾值,結果傳遞給callback,就這些了。

這是同樣具有:

var docIsNull = null!=doc; 
callback(docIsNull); 

我不知道具體方法的結果,但它只是提供回調與truefalse,在doc值是否爲null與否。

我猜如果docnull,這意味着沒有找到具有該特定密碼的特定電子郵件。所以,當你調用login,你可能會使用:

login("some email", "some password", function (authenticated) { 
    if (authenticated) { 
     // email/password found and matched 
    } else { 
     // no match 
    } 
}); 
+1

+1,我會贊成的! – adeneo 2013-05-11 18:38:16

+1

非常感謝,+1 – 2013-05-11 19:50:24

+0

@ user1743843沒問題!這有道理和幫助嗎? – Ian 2013-05-12 20:10:15