Math.hypot()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
TheMath.hypot() static method returns the square root of the sum of squares of its arguments. That is,
In this article
Try it
console.log(Math.hypot(3, 4));// Expected output: 5console.log(Math.hypot(5, 12));// Expected output: 13console.log(Math.hypot(3, 4, 5));// Expected output: 7.0710678118654755console.log(Math.hypot(-5));// Expected output: 5Syntax
Math.hypot()Math.hypot(value1)Math.hypot(value1, value2)Math.hypot(value1, value2, /* …, */ valueN)Parameters
value1, …,valueNNumbers.
Return value
The square root of the sum of squares of the given arguments. ReturnsInfinity if any of the arguments is ±Infinity. Otherwise, if at least one of the arguments is or is converted toNaN, returnsNaN. Returns0 if no arguments are given or all arguments are ±0.
Description
Calculating the hypotenuse of a right triangle, or the magnitude of a complex number, uses the formulaMath.sqrt(v1*v1 + v2*v2), where v1 and v2 are the lengths of the triangle's legs, or the complex number's real and complex components. The corresponding distance in 2 or more dimensions can be calculated by adding more squares under the square root:Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4).
This function makes this calculation easier and faster; you callMath.hypot(v1, v2), orMath.hypot(v1, /* …, */, vN).
Math.hypot also avoids overflow/underflow problems if the magnitude of your numbers is very large. The largest number you can represent in JS isNumber.MAX_VALUE, which is around 10308. If your numbers are larger than about 10154, taking the square of them will result in Infinity. For example,Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity. If you usehypot() instead, you get a better answer:Math.hypot(1e200, 1e200) = 1.4142...e+200. This is also true with very small numbers.Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0, butMath.hypot(1e-200, 1e-200) = 1.4142...e-200.
With one argument,Math.hypot() is equivalent toMath.abs().Math.hypot.length is 2, which weakly signals that it's designed to handle at least two parameters.
Becausehypot() is a static method ofMath, you always use it asMath.hypot(), rather than as a method of aMath object you created (Math is not a constructor).
Examples
>Using Math.hypot()
Math.hypot(3, 4); // 5Math.hypot(3, 4, 5); // 7.0710678118654755Math.hypot(); // 0Math.hypot(NaN); // NaNMath.hypot(NaN, Infinity); // InfinityMath.hypot(3, 4, "foo"); // NaN, since +'foo' => NaNMath.hypot(3, 4, "5"); // 7.0710678118654755, +'5' => 5Math.hypot(-3); // 3, the same as Math.abs(-3)Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-math.hypot> |