Learn JavaScript

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

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

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

Синтаксис

Math.max(x1, x2, ...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

console.log(Math.max()); // -Infinity

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

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

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

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

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

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

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

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

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

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

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

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

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

console.log(Math.max(...numbers)); // 12

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

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

const numbers = [];

console.log(Math.max(...numbers)); // -Infinity

Math.max() и Math.min()

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

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

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

const value = -20;
const limited = Math.max(value, 0);

console.log(limited); // 0

Здесь Math.max() не даёт значению стать меньше 0.

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

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

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

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

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

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

NaN и Infinity

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

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

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

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

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

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

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

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

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

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

Пример:

const discount = -15;
const safeDiscount = Math.max(discount, 0);

console.log(safeDiscount); // 0

Так можно легко сказать: “значение не должно быть меньше нуля”.

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

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

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

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

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

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

console.log(Math.max()); // -Infinity

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

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

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

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

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

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

Коротко

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