Сокращенное выражение if/else: foo? Foo:bar vs foo || бар

Интересно, как эти два отличаются?

var hello = foo?foo:bar;

против

var hello = foo || bar;

Вы можете это объяснить? а какой пример дела? или оба одинаковы?

PS: foo / bar должен быть похож на string / int / obj / boolean...

1 ответ

Решение

? : называется условным оператором. Он принимает три аргумента (именно поэтому его иногда называют "троичным" оператором): что-то для проверки, что-то для возврата, если проверка верна, и что-то для возврата, если проверка ложна. *

Второй - это необычайно мощный логический оператор ИЛИ в JavaScript. Он принимает два аргумента. Он оценивает первый операнд и, если это правда, возвращает его; если первый - false, он оценивает и возвращает второй операнд.

Таким образом, разница между этими двумя заключается в следующем: с условным оператором, foo может оцениваться дважды (если это правда). С ||, foo оценивается только один раз. Это действительно не имеет значения, если foo а также bar это просто ссылки на переменные, но рассмотрим:

var hello = foo() ? foo() : bar();
// vs
var hello = foo() || bar();

Вы можете увидеть, как это важно, сколько раз foo() оценивается, если он выполняет какую-либо значительную работу или имеет какие-либо побочные эффекты.


(* Так что же представляют собой значения "правдивый" и "ложный"? 0, "", NaN, undefined, nullи конечно false, Все остальное "правдиво".)

Другие вопросы по тегам