Spread и apply
const arr = [3, 1, 4, 1, 5];
Math.max(...arr);
Math.max.apply(null, arr);
Пустой массив: Math.max() → -Infinity; обрабатывайте отдельно.
Очень большие массивы: spread может превысить лимит аргументов — тогда цикл/reduce:
arr.reduce((m, x) => (x > m ? x : m), -Infinity);
Итог
Math.max(...arr) для обычных размеров; reduce — для гигантских списков.