Метод exec
получит строку, поскольку логические операторы могут возвращать операнд, а не обязательно результат Boolean
, например:
Оператор Logical AND (&&
) вернет значение второго операнда , если первый truey :
true && "foo"; // "foo"
И он вернет значение первого операнда , если оно само по себе falsy :
NaN && "anything"; // NaN
0 && "anything"; // 0
Оператор Logical OR (||
) вернет значение второго операнда, если первый - falsy :
false || "bar"; // "bar"
И он вернет значение первого операнда , если оно само по себе не ложно :
"foo" || "anything"; // "foo"
Falsy Значения: null
, undefined
, NaN
, 0
, строка нулевой длины и, конечно, false
.
Все остальное, вычисленное в логическом контексте, равно truey (приведет к true
).
Итак, давайте посмотрим выражение:
var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
match[2] === "even" && "2n" || // return '2n' if match[2] is 'even'
match[2] === "odd" && "2n+1" || // return '2n+1' if it's 'odd'
!/\D/.test(match[2]) && "0n+" + match[2]|| // return '0n+N' if it's a digit(N)
match[2] // otherwise, return the match[2] value
);