В чем причина var a = (выражение1, expression2) в javascript?

Просматривая код JS, я нашел что-то вроде этого:

var a, b;
if ( (a = someFunction1(), b = someFunction2() )
){ ...
}

Я никогда не встречал ничего подобного раньше, и я не понимаю причины делать что-то подобное. Поэтому мне любопытно: это тот человек, который сделал это из своего разума, или я просто не способен понять его идею.

Когда я пытаюсь проверить, что такое конструкция (expression1, expression2), я вижу, что она всегда возвращает значение второго выражения:

(5, 6) // 6
('strange', 'things') // 'things'
(4, undefined) // undefined

Поэтому, если бы я был тем, кто писал этот код, я бы сделал что-то вроде этого:

var a = someFunction1(), b = someFunction2();
if (b){ ... }

Правильно ли я рассуждаю?

2 ответа

Когда я пытаюсь проверить, что такое конструкция <code>(expression1, expression2)</code>, я вижу, что она всегда возвращает значение второго выражения

Да. Даже не опробовав, это то, что делает оператор запятой.

Правильно ли я рассуждаю?

Да. Ваш код делает то же самое, но более читаем.


Вы правы, это по существу, if(b). Читаемость первой версии ужасна и не экономит пространство, поэтому для нее не было бы никакого смысла ее минимизировать.

Присвоение переменных внутри условных утверждений является плохой практикой.

licensed under cc by-sa 3.0 with attribution.