Learn JavaScript

Math.hypot() - метод для вычисления корня из суммы квадратов в JavaScript

Math.hypot() вычисляет корень из суммы квадратов аргументов.

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

Синтаксис

Math.hypot(x1, x2, ...)

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

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

Math.hypot() считает результат по формуле:

sqrt(x1^2 + x2^2 + ...)

Самый известный пример - гипотенуза прямоугольного треугольника.

console.log(Math.hypot(3, 4)); // 5

Потому что:

  • 3 * 3 = 9
  • 4 * 4 = 16
  • 9 + 16 = 25
  • sqrt(25) = 5

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

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

const result = Math.hypot(6, 8);

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

Не только два аргумента

Метод умеет работать не только с двумя числами.

console.log(Math.hypot(3, 4, 12)); // 13

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

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

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

console.log(Math.hypot(5));  // 5
console.log(Math.hypot(-5)); // 5

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

console.log(Math.hypot()); // 0

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

Отрицательные значения не мешают, потому что внутри они возводятся в квадрат.

console.log(Math.hypot(-3, 4)); // 5

Знак тут не важен, важна только величина числа.

Math.hypot() и Math.sqrt(a * a + b * b)

На первый взгляд кажется, что это одно и то же.

console.log(Math.hypot(3, 4));              // 5
console.log(Math.sqrt(3 * 3 + 4 * 4));      // 5

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

Но Math.hypot() полезен тем, что лучше справляется с очень большими значениями.

console.log(Math.hypot(1e200, 1e200)); // 1.414213562373095e+200
console.log(Math.sqrt(1e200 * 1e200 + 1e200 * 1e200)); // Infinity

Именно поэтому Math.hypot() считается более надёжным вариантом.

Расстояние между точками

Один из самых частых сценариев - вычисление расстояния.

const dx = x2 - x1;
const dy = y2 - y1;

console.log(Math.hypot(dx, dy));

Такой код читается проще, чем ручная формула с квадратами и корнем.

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

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

console.log(Math.hypot("3", "4")); // 5
console.log(Math.hypot(null, 4));  // 4
console.log(Math.hypot(undefined, 4)); // NaN

На практике обычно лучше передавать в метод уже готовые числа.

NaN и Infinity

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

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

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

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

const a = 3;
const b = 4;
const result = Math.hypot(a, b);

console.log(a);      // 3
console.log(b);      // 4
console.log(result); // 5

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

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

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

Пример:

const distance = Math.hypot(x2 - x1, y2 - y1);

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

Писать длинную формулу вручную без необходимости

Math.sqrt(a * a + b * b)

Такой вариант работает, но Math.hypot(a, b) читается проще.

Думать, что метод принимает только два числа

console.log(Math.hypot(3, 4, 12)); // 13

На самом деле аргументов может быть больше.

Забывать про неявное приведение типов

console.log(Math.hypot(null, 4));      // 4
console.log(Math.hypot(undefined, 4)); // NaN

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

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

Коротко

Math.hypot() - это удобный способ посчитать гипотенузу или расстояние в JavaScript. Главное, что стоит запомнить: метод принимает любое количество аргументов и часто лучше ручной формулы через Math.sqrt(a * a + b * b), особенно на больших числах.