1. 基本概念

Math.hypot()方法的功能就是先计算它的所有参数的平方和,再返回该和的平方根。我们知道,在数学上一个正数有两个平方根,它们绝对值相等但一正一负;但是由于Math.hypot()方法只能返回一个值,因此它的结果是为正的那个平方根。Math.hypot()方法可以接受任意多个参数,比如0个、1个、两个等等。

调用Math.hypot()方法的语法形式如下所示,其中方括号表示它里面的内容可有可无,实际调用该方法的时候不要书写方括号。

Math.hypot( [value1 [, value2 [, ...] ] ] );

因为Math.hypot()方法要先计算它的参数的平方和,那么我们可知它的所有参数都应该是数字,即它们都属于Number类型。如果某个参数不是Number类型的,那么它会先被自动转换为Number类型。

我们举一个具体的例子来演示Math.hypot()方法的作用。假设我们要求一个直角三角形的斜边有多长,并且已知两个直角边分别是3和4。按照勾股定理可知,斜边等于两个直角边的平方和再开方。这一计算过程正好可以交给Math.hypot()方法来完成,我们以两个参数3和4调用Math.hypot(),那么它的结果就是斜边的长度5。

Math.hypot(3, 4)的执行过程是这样的:先计算3和4的平方和,即3的平方9加上4的平方16,结果是25;再计算该平方和(25)的平方根,结果就是5。其它情况以此类推,反正都是先计算所有参数的平方和,再求该和的平方根。

2. 返回值规则

因为Math.hypot()方法可以接受任意多个参数,并且JavaScript的Number类型包含NaN、+0、-0、正无穷(+Infinity)和负无穷(-Infinity)这5个特殊数字,这就让调用Math.hypot()方法时的参数可能非常复杂。因此JavaScript要按照如下规则来决定Math.hypot()方法的返回值;如果某个参数不是数字,那么下面这些规则中提到的参数的值指的是它被转换为数字后的值。

1. 如果没有传递任何参数,即Math.hypot()的参数数量为0,那么返回值是+0;

2. 如果任意一个参数是正无穷(+Infinity),那么返回值是正无穷;

3. 如果任意一个参数是负无穷(-Infinity),那么返回值是正无穷;

4. 如果所有参数中都不包含正无穷和负无穷,并且任意一个参数是NaN,那么返回值是NaN;

5. 如果所有参数都是+0或者-0,那么返回值是+0;

6. 其余情况下,就先计算所有参数的平方和,再将该和的平方根作为最终返回值。

对以上这些规则不要死记硬背,它们在本质上都是对先计算所有参数的平方和再计算该和的平方根这一过程的运用,只是当参数为0个或者为特殊数字时,需要额外注意而已。

3. 示例

我们用不同的参数组合来调用Math.hypot()方法,并展示它们的结果;调用每一个Math.hypot()方法时的参数有何特点,都用相应的注释进行说明。以下代码的执行结果如图1所示。

图1 示例代码的执行结果

(完)