2013-05-11 5 views
0

Я читаю книгу о создании веб-приложения с узлом, позвоночником и mongodb. Я получил образцы из книги и столкнулся с фрагментом кода, который смутил меня.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 является среднее значение NULL не равен док, но как получилось, что вы можете использовать его в качестве аргумента.

+5

'нуль = doc' получает оценку как логическое и результат передается в функцию обратного вызова, это все. Это то же самое, что и var docIsNull = null! = Doc; callback (docIsNull); ' – Ian

+1

^^^^^ То, что он сказал, оценивая выражение, возвращает логическое, более или менее то, что оценка происходит в отдельной переменной или непосредственно не имеет значения, она все равно передает полученное логическое значение функции обратного вызова , – adeneo

+1

@Ian: ваш комментарий должен быть принят как ответ. :) – mithunsatheesh

ответ

-2

Кажется, что было происходит следующим образом. Когда эта функция вызывается, что nul наследует истинное значение от doc, а затем это используется при обработке функции обратного вызова. то, что происходит здесь, заключается в том, что когда null считается не равным doc, что функция обратного вызова будет обработана, зная, что значение null не равно doc. Если бы мы знали больше о функции и о том, что происходит, я мог бы быть более продуманным, но на данный момент все, что я могу сказать, это именно то, что происходит.

+1

Это совершенно неправильно. 'null' - это ключевое слово и примитивное значение в JavaScript. –

4

null!=doc оценивается как логическое значение, и результат передается callback, вот и все.

Это то же самое, что имеет:

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

Я не уверен в результате конкретного метода, но это только при условии обратного вызова с true или false, было ли значение docnull или нет.

Я бы предположил, что если doc были null, это означает, что конкретный адрес электронной почты с указанным паролем не найден. Так что, когда вы звоните login, вы бы, вероятно, использовать:

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

+1, я продолжу это! – adeneo

+1

большое спасибо, +1 –

+0

@ user1743843 Нет проблем! Это имеет смысл и помогает? – Ian

Смежные вопросы