Переменное присваивание внутри условия "if" в JavaScript
Как выполняется следующий код?
if(a=2 && (b=8))
{
console.log(a)
}
OUTPUT
a=8
Ответы
Ответ 1
Это не имеет ничего общего с оператором if
, но:
if(a=2 && (b=8))
Здесь последний, (b=8)
, фактически возвращает 8, так как назначение всегда возвращает назначенное значение, поэтому оно то же, что и запись
a = 2 && 8;
И 2 && 8
возвращает 8
, так как 2 является правдивым, поэтому он так же, как и запись a = 8
.
Ответ 2
Как правило, плохой идеей делать присваивание переменных внутри инструкции if
вроде этого. Однако в этом конкретном случае вы по существу делаете это:
if(a = (2 && (b = 8)));
Часть (b = 8)
возвращает 8
, поэтому мы можем переписать ее как:
if(a = (2 && 8))
Оператор &&
возвращает значение правой стороны, если левая сторона считается истинной, поэтому 2 && 8
возвращает 8
, поэтому мы можем переписать еще раз:
if(a = 8)
Ответ 3
Он называется приоритетом оператора
(a=2 && (b=8))
В примере . то результаты оцениваются по сравнению с основным & знак.
(a=2 && (b=8)) evaluated to a = 2 && 8
So 2 && 8 return a = 8
Ответ 4
Вы устанавливаете (не сравниваете) a
на 2 && (b=8)
. Поскольку 2
является tru-ish, вторая половина выражения будет выполнена, то есть a = true && (b = 8)
, то есть a = (b = 8)
, то есть a = 8
.
Ответ 5
Ваше утверждение интерпретируется как
a = (2 && (b=8))
когда вы используете оператор &&
, тогда возвращается последнее истинное значение оператора. Здесь (b = 8) будет значение 8
, которое является истинным и последним оператором.
Ответ 6
Чтобы понять, что происходит, обратитесь к диаграмме приоритетов и диаграмм ассоциативности операторов. Выражение a = 2 && (b = 8)
оценивается следующим образом:
-
Оператор
-
&&
оценивается до =
, поскольку он имеет более высокий приоритет
- оценивается левое выражение
2
, которое является правдивым
- оценивается правое выражение
b = 8
(b
становится 8
и возвращается 8
)
-
8
возвращается
-
a = 8
оценивается (a
становится 8
и возвращается 8
)
Наконец, предложение if
проверяется на 8
.
Обратите внимание, что 2
не играет никакой роли в этом примере. Однако, если мы используем некоторое значение фальшивки, результат будет совершенно другим. В этом случае a
будет содержать это значение фальши и b
останется нетронутым.