От автора: поиск минимума и максимума в наборе чисел – обычная задача в программировании. В JavaScript для этого вполне можно использовать математические операторы или даже серию условий if, однако функция Math.max (и противоположная ей Math.min) намного эффективнее и точнее.
Math.max отличается от самописных функций тем, что она встроенная и ее можно сразу же использовать. Из набора аргументов данная функция всегда возвращает самое большое число. Например, в консоли:
1 2 |
Math.max(5, 10, 11, 3, 22); > 22 |
Если в аргументах переданы не числа, результат будет Nan (Not A Number, для новичков эта тема вообще темный лес). Также Math.max может принимать переменные и свойства объекта:
1 2 3 4 5 6 |
let orbitalPeriod = new Object(); orbitalPeriod.Mercury = 87.97, orbitalPeriod.Venus = 224.70, orbitalPeriod.Mars = 686.98; Math.max(orbitalPeriod.Mercury, orbitalPeriod.Venus, orbitalPeriod.Mars) > 686.98 |
Единственное, что не умеет эта функция – автоматически искать максимальное значение в массиве. Здесь традиционно нужно использовать цикл и сравнивать каждое значение, сохраняя большее из них. Для браузеров с поддержкой ES6 оператор spread еще короче:
1 2 |
let orbitalPeriods = [87.97, 224.70, 686.98], longestOrbit = Math.max(... orbitalPeriods); |
Math.max часто используют для сравнения типа «или». Например, если вы берете размеры экрана:
1 |
let screenWidth = (screen.width, 0) |
Переменная screenWidth, назначаемая через let, должна быть числом: либо ширина экрана (если тест провалился, и это не число), либо 0.
Достать до дна
Math.min работает наоборот: среди значений .min находит минимальное.
1 2 |
Math.min(0.139, 0.15, 1); > 0.139 |
Math.min часто используют для установки или определения граничных условий. Например, у нас есть мяч, прыгающий внутри прямоугольной области. Правая сторона прямоугольника равна 500px. При соприкосновении необходимо, чтобы правая сторона мяча (ball.right) не выходила за пределы правой стороны прямоугольника (500).
1 |
let collide = Math.min(ball.right,500); |
Также можно использовать оператор троеточия для «распространения» значений в массиве внутри функции Math.min. Дан массив bugSizes, нужно найти самое маленькое насекомое:
1 |
Math.min(...bigSizes) |
Или можно использовать apply (поддержка которого намного лучше):
1 |
Math.min.apply(null, bigSizes); |
Как и троеточие, apply можно использовать с Math.max.
Источник: //thenewcode.com/
Редакция: Команда webformyself.