ๆญค้กต้ข็”ฑ็คพๅŒบไปŽ่‹ฑๆ–‡็ฟป่ฏ‘่€Œๆฅใ€‚ไบ†่งฃๆ›ดๅคšๅนถๅŠ ๅ…ฅ MDN Web Docs ็คพๅŒบใ€‚

View in English Always switch to English

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() ๅ‡ฝๆ•ฐ่ฟ”ๅ›žๆ‰€ๆœ‰ๅ‚ๆ•ฐ็š„ๅนณๆ–นๅ’Œ็š„ๅนณๆ–นๆ น๏ผŒๅณ๏ผš

๐™ผ๐šŠ๐š๐š‘.๐š‘๐šข๐š™๐š˜๐š(v1,v2,โ€ฆ,vn)=โˆ‘i=1nvi2=v12+v22+โ€ฆ+vn2\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}

ๅฐ่ฏ•ไธ€ไธ‹

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()

js
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)

ๅ‘ไธ‹ๅ…ผๅฎน

ๆญคๅ‡ฝๆ•ฐๅฏไปฅไฝฟ็”จๅฆ‚ไธ‹ไปฃ็ ๆจกๆ‹Ÿ๏ผš

js
if (!Math.hypot)
  Math.hypot = function () {
    var y = 0,
      i = arguments.length;
    while (i--) y += arguments[i] * arguments[i];
    return Math.sqrt(y);
  };

ๅฆไธ€็ง้ฟๅ…็ป“ๆžœๆบขๅ‡บ็š„ๅฎž็Žฐ๏ผš

js
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

ๆต่งˆๅ™จๅ…ผๅฎนๆ€ง

ๅ‚่ง