Как вы можете видеть, этот код довольно прост, я на самом деле понимаю большую его часть, но единственная часть, которая меня смущает, это начало оператора if и, более конкретно, использование нуля. из того, что я прочитал, null становится значением или заменой, в отличие от undefined, где это просто так, undefined. так зачем использовать нуль в этом случае?

function range(start, end, step) {
  if (step == null) step = 1;
  var array = [];

  if (step > 0) {
    for (var i = start; i <= end; i += step)
      array.push(i);
  } else {
    for (var i = start; i >= end; i += step)
      array.push(i);
  }
  return array;
}

function sum(array) {
  var total = 0;
  for (var i = 0; i < array.length; i++)
    total += array[i];
  return total;
}

console.log(range(1, 10))
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1, 10)));
// → 55
1
Nicholas Rotondo 9 Янв 2017 в 22:05

3 ответа

Лучший ответ

Если функция вызывается без параметра step, по умолчанию для нее устанавливается значение 1.

Так вот:

console.log(range(1, 10)
/ → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Нет включенного «шага» ... но в выводе показано, что шаг был установлен в 1. В следующих примерах шаг IS включен, так что вместо него используется значение.

0
Cody Loyd 9 Янв 2017 в 19:10

step будет неопределенным, если его исключить из диапазона, потому что это работает из-за слабого сравнения null == undefined верно, но если мы используем более строгую оценку, т.е. null === undefined, мы получим ложный.

1
Musa 9 Янв 2017 в 19:13

В функции JavaScript, если определенный параметр не указан, он не определен. здесь в коде это должно быть

if (step === undefined) step = 1;

Всегда лучше использовать строгое сравнение. Поскольку null==undefined также undefined== null, код работает. Вы должны изменить код, как указано.

0
Ouroborus 9 Янв 2017 в 19:40