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