Оператор &&
известен как «boolean AND
». Как правило, вы бы увидели его в if
заявлении:
if (x == true && y == false) {
, но это не является ограничением. Вы можете использовать его в любом допустимом выражении «объединить» в логических значения своих операндов в один логический результат, в соответствии с логическими «И» операциями:
var z = (x == true && y == false);
// z is now true or false, accordingly
Одна из прекрасных вещей о &&
является то, что ему "короткие замыкания". В false && true
, поскольку первый операнд false
, все выражение может оцениваться только false
, поэтому второй операнд даже не оценивается.
Давайте проверим, что снова:
var z = (false && foo());
// z is now false
В этом заявлении, функция foo
никогда даже не называют! Это не должно быть, программа знать, что z
будет false.
Это больше, чем оптимизация — вы можете положиться на него.
Некоторые глупые люди используют эту технику, чтобы переписать условные операторы:
if (x == 0) {
foo();
}
в труднодоступные читаемых отдельных выражений:
(x == 0) && foo();
Теперь рассмотрим, что назначение может быть выражением так же, как вызов функции:
var a = (b = c);
Или:
var a = (b = foo());
И добавить в условном с помощью приведенной выше методики:
var a = ((x == 0) && (b = foo()));
Теперь все выражение b = foo()
не будет оцениваться на всех, если x
не 0
, из-за короткого замыкания.
Мы даже не нужно ничего делать с результатом &&
операции, и если мы не будем хранить его a
вы остались только:
(x == 0) && (b = foo());
который является утверждение, что присвоить b
значение foo()
, только если x
- 0
.
Избегайте его. Трудно читать. Просто используйте инструкцию if
.
эй, кажется, плохой код - (! =) Означает не равный и проверка, если объект не равен нулю, а второе условие (=) означает назначение - интересно, почему он используется в условном выражении в этом экземпляре. Ура! –
@Tats_innit: Где условное утверждение? Этот код совершенно верен; это просто глупо. –
@LightnessRacesinOrbit Hiya Счастый человек, которого я предположил ** условный **, потому что он использует не нулевую проверку, спасибо и srry, если я ошибаюсь - Ах круто, поэтому не только я на самом деле это плохое утверждение! Cheers –