Learn JavaScript

Math.min() - метод для поиска минимального числа в JavaScript

Math.min() возвращает наименьшее число из переданных аргументов.

Проще всего запомнить так: метод выбирает самое маленькое значение из списка.

Синтаксис

Math.min(x1, x2, ...)

Метод принимает любое количество аргументов.

Что делает Math.min()

Math.min() сравнивает все переданные значения и возвращает минимальное.

console.log(Math.min(10, 4, 7)); // 4
console.log(Math.min(-3, 8, 0)); // -3
console.log(Math.min(2, 2, 2));  // 2

Если минимальное значение встречается несколько раз, результат всё равно будет одним и тем же числом.

Что возвращает Math.min()

Math.min() возвращает число типа number.

const result = Math.min(12, 5, 9);

console.log(result);        // 5
console.log(typeof result); // "number"

Это именно число, а не строка.

Один аргумент и пустой вызов

Если передать один аргумент, метод просто вернёт его.

console.log(Math.min(5));   // 5
console.log(Math.min(-12)); // -12

Если не передать ничего, результатом будет Infinity.

console.log(Math.min()); // Infinity

Сначала это может выглядеть странно, но такое поведение полезно как стартовое значение при поиске минимума.

Отрицательные и дробные числа

Метод одинаково хорошо работает с целыми, отрицательными и дробными значениями.

console.log(Math.min(-4, -9, -2));    // -9
console.log(Math.min(3.5, 2.1, 8.7)); // 2.1
console.log(Math.min(-1.5, 0, 2));    // -1.5

Чем меньше число на числовой прямой, тем больше шанс, что именно оно и вернётся.

Math.min() и массив

Вот здесь часто возникает ошибка.

Math.min() ждёт не массив, а отдельные аргументы.

const numbers = [8, 3, 12, 1];

console.log(Math.min(numbers)); // NaN

Если передать массив напрямую, метод не получит список чисел для сравнения.

Правильный вариант - развернуть массив через оператор ....

const numbers = [8, 3, 12, 1];

console.log(Math.min(...numbers)); // 1

Именно так обычно ищут минимальное значение в массиве.

Если массив пустой, результат снова будет Infinity.

const numbers = [];

console.log(Math.min(...numbers)); // Infinity

Math.min() и Math.max()

Math.min() и Math.max() работают в противоположные стороны.

console.log(Math.min(4, 9, 1)); // 1
console.log(Math.max(4, 9, 1)); // 9
  • Math.min() ищет самое маленькое значение
  • Math.max() ищет самое большое

Их часто используют вместе, когда значение нужно ограничить диапазоном.

const value = 120;
const limited = Math.min(value, 100);

console.log(limited); // 100

Здесь Math.min() не даёт значению стать больше 100.

Неявное приведение типов

Math.min() сначала пытается привести аргументы к числам.

console.log(Math.min("10", "3", 7)); // 3
console.log(Math.min(null, 5));      // 0
console.log(Math.min(true, 5));      // 1
console.log(Math.min(undefined, 5)); // NaN

Из-за этого строки с числами могут сработать, но полагаться на такое поведение обычно не стоит.

Если хотя бы один аргумент не удаётся нормально превратить в число, результатом станет NaN.

console.log(Math.min("10", "abc")); // NaN

NaN и Infinity

Для специальных числовых значений метод ведёт себя предсказуемо.

console.log(Math.min(NaN, 4));       // NaN
console.log(Math.min(Infinity, 4));  // 4
console.log(Math.min(-Infinity, 4)); // -Infinity

Infinity может участвовать в сравнении как очень большое число, а -Infinity всегда будет самым маленьким значением.

Числа не меняются

Math.min() не изменяет исходные значения. Он только возвращает новый результат.

const a = 15;
const b = 7;
const min = Math.min(a, b);

console.log(a);   // 15
console.log(b);   // 7
console.log(min); // 7

Когда это полезно

Math.min() удобно использовать, когда:

  • нужно найти самое маленькое значение среди нескольких чисел
  • нужно получить минимальную цену, длину, координату или оценку
  • нужно ограничить значение сверху

Пример:

const uploaded = 14;
const visible = Math.min(uploaded, 10);

console.log(visible); // 10

Так можно легко сказать: “показываем не больше 10 элементов”.

Частые ошибки

Передавать массив без spread

const numbers = [8, 3, 12, 1];

console.log(Math.min(numbers)); // NaN

Нужно писать Math.min(...numbers).

Забывать, что пустой вызов возвращает Infinity

console.log(Math.min()); // Infinity

Если список значений может быть пустым, этот случай лучше предусмотреть отдельно.

Передавать значения, которые не приводятся к числу

console.log(Math.min("10", "abc")); // NaN

Одного неподходящего значения достаточно, чтобы итогом стал NaN.

Быстрая памятка

  • Math.min() возвращает самое маленькое значение из аргументов
  • метод возвращает number
  • аргументов может быть сколько угодно
  • если аргумент один, вернётся он же
  • если аргументов нет, результатом будет Infinity
  • для массива обычно используют Math.min(...array)
  • если хотя бы один аргумент превращается в NaN, итог тоже будет NaN

Коротко

Math.min() - это стандартный способ найти минимальное число в JavaScript. Главное, что стоит запомнить: метод принимает отдельные аргументы, а для массива его обычно вызывают как Math.min(...array).