Math.hypot()
Math.hypot()
静态方法返回其参数的平方和的平方根。也就是说,
试一试
语法
Math.hypot()
Math.hypot(value1)
Math.hypot(value1, value2)
Math.hypot(value1, value2, /* …, */ valueN)
参数
value1
, …,valueN
-
数字。
返回值
描述
计算直角三角形的斜边或复数的模长,使用公式 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()
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 的浏览器中加载。