Есть ли разница между следующими двумя фрагментами или любой причиной использования одного над другим?Разница между «if (foo) bar();» и "foo && bar();"
if (foo) {
bar();
}
foo && bar();
Есть ли разница между следующими двумя фрагментами или любой причиной использования одного над другим?Разница между «if (foo) bar();» и "foo && bar();"
if (foo) {
bar();
}
foo && bar();
Вторая форма известна как short-circuit evaluation и результаты точно так же, как и в первой форме. Однако первая форма более читаема и должна быть предпочтительной для ремонтопригодности.
Этот тип оценки коротких замыканий часто встречается в if-утверждениях, где правая рука условно оценивается. См. Пример ниже; bar оценивается только в том случае, если foo имеет значение true.
if (foo && bar()) {
// ...
}
+1 Отличный ответ. – Matt
Это не совсем то же самое, в смысле грамматики. (* выражение * vs * statement *) – user123444555621
версия foo && bar()
является выражением, и, таким образом, имеет значение:
var result = foo && bar();
При использовании версии if
, выше может выглядеть следующим образом:
var result;
if (foo) {
result = bar();
}
который больше подробный.
Фактически 'foo && bar();' это выражение, а не выражение, 'foo && bar()' - выражение. – zch
@zch Правильно. Это выражение [выражение] (http://es5.github.io/#x12.4). – user123444555621
неверная версия if; если foo является ложным, возвращается значение фальшивости. Таким образом, 'else {result = foo; } '. – bouke
Ответ на вопросник с оценкой коротких замыканий действительно хорош. Но мне нравится добавить, что хорошим стилем кодирования является использование if-statement, если вызов bar() не имеет значения boolean-return-value, и никакое дополнительное условие не должно выполняться с помощью bar().
1-й более традиционный. Фактически, они все те же. –
Никакой разницы, но я предпочитаю однострочное выражение 'if'. 'if (foo) bar();' – elclanrs