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 โจ2015ๅนด7ๆโฉ.
Math.hypot()
ๅฝๆฐ่ฟๅๆๆๅๆฐ็ๅนณๆนๅ็ๅนณๆนๆ น๏ผๅณ๏ผ
ๅฐ่ฏไธไธ
console.log(Math.hypot(3, 4));
// Expected output: 5
console.log(Math.hypot(5, 12));
// Expected output: 13
console.log(Math.hypot(3, 4, 5));
// Expected output: 7.0710678118654755
console.log(Math.hypot(-5));
// Expected output: 5
่ฏญๆณ
Math.hypot([value1[,value2, ...]])
ๅๆฐ
value1, value2, ...
-
ไปปๆไธชๆฐๅญใ
่ฟๅๅผ
ๅฐๆๆไพ็ๅๆฐๆฑๅนณๆนๅๅๅผๅนณๆนๆ นใๅฆๆๆๅๆฐไธ่ฝ่ฝฌๆขไธบๆฐๅญ๏ผๅ่ฟๅ NaN
ใ
ๆ่ฟฐ
่ฎก็ฎ็ด่งไธ่งๅฝข็ๆ่พน๏ผๆๅคๆฐ็ๅน
ๅผๆถๅฏไปฅไฝฟ็จๅฝๆฐ Math.sqrt(v1*v1 + v2*v2)
๏ผๅ
ถไธญ v1 ๅ v2 ๆฏไธ่งๅฝข็ไธคไธช็ด่ง่พนๆๅคๆฐ็ๅฎ้จๅ่้จใๅฆๆๆณ่ฎก็ฎๆดๅค็ปดๅบฆ๏ผ้ฃไนๅช้่ฆๅจๅ้ขๆทปๅ ๆดๅค็ๆฐ็ๅนณๆนๅฐฑๅฏไปฅไบ๏ผๆฏๅฆ Math.sqrt(v1*v1 + v2*v2 + v3*v3 + v4*v4)
ใ
ๆฌๅฝๆฐๆฏ Math.sqrt()
ๆด็ฎๅไนๆดๅฟซ๏ผไฝ ๅช้่ฆ่ฐ็จ Math.hypot(v1, v2)
ๆ Math.hypot(v1, v2, v3, v4, ...)
ใ
ๅฎ่ฟ้ฟๅ
ไบๅน
ๅผ่ฟๅคง็้ฎ้ขใJS ไธญๆๅคง็ๅ็ฒพๅบฆๆตฎ็นๆฐๆฏ Number.MAX_VALUE = 1.797...e+308
ใๅฆๆไฝ ็ๆฐๅญๆฏ็บฆ 1e154 ๅคง๏ผ่ฎก็ฎๅ
ถๅนณๆนๅผไผ่ฟๅ 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
ๅๆฏๆญฃ็กฎ็็ปๆใ
็ฑไบ hypot
ๆฏ Math
็้ๆๆนๆณ๏ผๆไปฅๅบ่ฏฅไปฅ Math.hypot()
็ๆนๅผไฝฟ็จ๏ผ่ไธๆฏไฝไธบไฝ ๅๅปบ็ Math
ๅฏน่ฑก็ๅฑๆง๏ผMath
ไธๆฏไธไธชๆ้ ๅฝๆฐ๏ผใ
ๅฆๆไธไผ ๅ ฅไปปไฝๅๆฐ๏ผๅ่ฟๅ +0ใ
ๅฆๆๅๆฐๅ่กจไธญๆ่ณๅฐไธไธชๅๆฐไธ่ฝ่ขซ่ฝฌๆขไธบๆฐๅญ๏ผๅ่ฟๅ NaN
ใ
ๅฆๆๅชไผ ๅ
ฅไธไธชๅๆฐ๏ผMath.hypot(x)
็ญๅไบ Math.abs(x)
ใ
็คบไพ
Using Math.hypot()
Math.hypot(3, 4); // 5
Math.hypot(3, 4, 5); // 7.0710678118654755
Math.hypot(); // 0
Math.hypot(NaN); // NaN
Math.hypot(3, 4, "foo"); // NaN, +'foo' => NaN
Math.hypot(3, 4, "5"); // 7.0710678118654755, +'5' => 5
Math.hypot(-3); // 3, the same as Math.abs(-3)
ๅไธๅ ผๅฎน
ๆญคๅฝๆฐๅฏไปฅไฝฟ็จๅฆไธไปฃ็ ๆจกๆ๏ผ
if (!Math.hypot)
Math.hypot = function () {
var y = 0,
i = arguments.length;
while (i--) y += arguments[i] * arguments[i];
return Math.sqrt(y);
};
ๅฆไธ็ง้ฟๅ ็ปๆๆบขๅบ็ๅฎ็ฐ๏ผ
if (!Math.hypot)
Math.hypot = function (x, y) {
// https://bugzilla.mozilla.org/show_bug.cgi?id=896264#c28
var max = 0;
var s = 0;
for (var i = 0; i < arguments.length; i += 1) {
var arg = Math.abs(Number(arguments[i]));
if (arg > max) {
s *= (max / arg) * (max / arg);
max = arg;
}
s += arg === 0 && max === 0 ? 0 : (arg / max) * (arg / max);
}
return max === 1 / 0 ? 1 / 0 : max * Math.sqrt(s);
};
่ง่
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # sec-math.hypot |
ๆต่งๅจๅ ผๅฎนๆง
Loadingโฆ