(step == undefined || step == null || (step == 0 && start < end))
Соответственно, при вычислении получаете true || true || (false && false)
, что даёт true и третье условие срабатывает.const range = (start, end, step = 1) => {
if (step === 0 || isNaN(Number(step))) {
throw new Exception('Неверное значение step');
}
if (start < end && step < 0 || start > end && step > 0) {
step = -step;
}
const n = Math.floor((end - start) / step) + 1;
return Array(n).fill(1).map((v, i) => start + step * i);
}
console.log(range(10, 1));
// Array(10) [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]