Один очевидный подход заключается в functionize код, который повторяется:
function checkVars(a, b) {
return !a && !b || a === b;
}
// ...
if (checkVars(a, x) && checkVars(b, y) && checkVars (c, z)) {
// ...
}
Как совершенно правильно сказано, вы должны дать эту функцию описательное имя, показывая, что он действительно делает. По-видимому, он проверяет, являются ли заданные переменные ложными или идентичны ли они, поэтому один очевидный выбор - falsyOrIdentical
. Тогда ваше if
заявления станет действительно самостоятельное комментирование:
if (falsyOrIdentical(a, x)
&& falsyOrIdentical(b, y)
&& falsyOrIdentical(c, z)) {
// here goes the code
}
Если есть больше переменных, чтобы проверить, подход Павло (в одной функции, используя slice.call(arguments)
трюк, чтобы превратить весь ВАР в массив, а затем применять эту функцию до тех пор, пока не удается для каждого элемента этого массива с помощью метода every
) является лучшим. Но опять же, я действительно задаюсь вопросом, не должны ли все эти переменные быть частью коллекции - так что вы сможете сразу перейти с every
.
'! A &&! B <=>! (A || b)', если это упростит. Мне всегда легче иметь как можно меньше отрицаний в моих структурах управления. – Christoph
@Christoph благодарит за совет –