Math.hypot()

基线 广泛可用

此功能已得到良好建立,并在许多设备和浏览器版本上都能正常工作。它自以下时间起在各个浏览器中都可用 2015年7月.

Math.hypot() 静态方法返回其参数的平方和的平方根。也就是说,

𝙼𝚊𝚝𝚑.𝚑𝚢𝚙𝚘𝚝 ( v 1 , v 2 , , v n ) = i = 1 n v i 2 = v 1 2 + v 2 2 + + v n 2 \mathtt{\operatorname{Math.hypot}(v_1, v_2, \dots, v_n)} = \sqrt{\sum_{i=1}^n v_i^2} = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2}

试一试

语法

js
Math.hypot()
Math.hypot(value1)
Math.hypot(value1, value2)
Math.hypot(value1, value2, /* …, */ valueN)

参数

value1, …, valueN

数字。

返回值

给定参数的平方和的平方根。如果任何参数为 ±Infinity,则返回 Infinity。否则,如果至少一个参数为或转换为 NaN,则返回 NaN。如果未提供任何参数或所有参数均为 ±0,则返回 0

描述

计算直角三角形的斜边或复数的模长,使用公式 Math.sqrt(v1*v1 + v2*v2),其中 v1 和 v2 分别是三角形两条边的长度,或复数的实部和虚部。可以通过在平方根下添加更多平方来计算 2 个或更多维度的相应距离:Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4)

此函数使此计算更轻松快捷;您可以调用 Math.hypot(v1, v2)Math.hypot(v1, /* …, */, vN)

Math.hypot 还可以避免如果数字的大小非常大时出现的溢出/下溢问题。您可以在 JS 中表示的最大数字是 Number.MAX_VALUE,大约为 10308。如果您的数字大于大约 10154,则对其进行平方将导致 Infinity。例如,Math.sqrt(1e200*1e200 + 1e200*1e200) = Infinity。如果您改为使用 hypot(),则会得到更好的答案:Math.hypot(1e200, 1e200) = 1.4142...e+200。对于非常小的数字,情况也是如此。Math.sqrt(1e-200*1e-200 + 1e-200*1e-200) = 0,但 Math.hypot(1e-200, 1e-200) = 1.4142...e-200

对于一个参数,Math.hypot() 等效于 Math.abs()Math.hypot.length 为 2,这弱化地表明它旨在处理至少两个参数。

由于 hypot()Math 的静态方法,因此您始终将其用作 Math.hypot(),而不是用作您创建的 Math 对象的方法(Math 不是构造函数)。

示例

使用 Math.hypot()

js
Math.hypot(3, 4); // 5
Math.hypot(3, 4, 5); // 7.0710678118654755
Math.hypot(); // 0
Math.hypot(NaN); // NaN
Math.hypot(NaN, Infinity); // Infinity
Math.hypot(3, 4, "foo"); // NaN, since +'foo' => NaN
Math.hypot(3, 4, "5"); // 7.0710678118654755, +'5' => 5
Math.hypot(-3); // 3, the same as Math.abs(-3)

规范

规范
ECMAScript 语言规范
# sec-math.hypot

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅