Подтвердить что ты не робот

Переменное присваивание внутри условия "if" в JavaScript

Как выполняется следующий код?

if(a=2 && (b=8))
{
    console.log(a)
}

OUTPUT

a=8
4b9b3361

Ответ 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 останется нетронутым.