1. 基本概念
如果要求一个角的正切值,那么可以使用Math.tan()方法;它的语法结构就像下面这样:
Math.tan(x);
要注意的有两点,一是该参数x代表的是一个角的弧度值而不是角度值。二是如果参数x不是一个数字(即Number类型),那么它会先被自动转换为数字。
由于JavaScript的数字类型包含几个特殊的值,所以Math.tan()方法的详细结果由如下规则决定。如果x原本不是数字,那么下面这些规则中提到的x的值指的均是它被转换为数字后的值。
1. 如果x是NaN,那么结果也是NaN;
2. 如果x是+0,那么结果也是+0;
3. 如果x是-0,那么结果也是-0;
4. 如果x是正无穷(+Infinity)或负无穷(-Infinity),那么结果将是NaN;
5. 其余情况下,结果是x所代表的弧度值的正切值。
正切函数的图像如图1所示,根据该图像可以更好地理解以上这些规则的原理。
图1 正切函数的图像
2. 示例
2.1 参数为普通数字
首先,让我们先考察一下参数为普通数字的情况,它对应上面的第5条规则,这也是我们大多数时候使用Math.tan()的情况;此时的执行结果如图2所示。
该例子中有两点需要注意,第一是在JavaScript中我们无法精确表示圆周率π,Math.PI也仅仅是它的近似表示而已。所以当我们指定参数为Math.PI/6、Math.PI、Math.PI/4的时候,得到的结果也是参数为π/6、π、π/4的理论值的近似值。
比如,在数学上tan(π/4)等于1,但Math.tan(Math.PI / 4)的结果却是0.999999...,这样的近似值精度还算比较高,在一般情况下是满足我们的需求的。
第二,正切函数的定义域为,也就是参数x不能为(π/2)+kπ,k∈Z。可是在下面的代码中当我们指定参数为Math.PI/2和(3/2)*Math.PI时,Math.tan()方法不但没有出错反而还产生了数值很大的结果,这同样是因为我们无法精确地表示圆周率π。Math.PI/2和(3/2)*Math.PI也仅仅是π/2和3π/2的近似值,而非精确值。
图2 参数为普通数字时的执行结果
2.2 参数为特殊数字
之后,我们再来看看参数为NaN、+0、-0、+Infinity和-Infinity这5个特殊数字时的情况,此时对应上面的第1至第4条规则;它们的执行结果如图3所示。
这里要注意的是,在JavaScript中显示正数的时候通常不显示它的正号;所以,当我们打印值为+0的结果时(图3中的第二个打印结果),你看到的显示结果为0。
图3 参数为特殊数字时的执行结果
2.3 参数不为数字
最后,再让我们来看看参数不是数字的情况;此时,参数会先被自动转换为数字,再对该弧度值求其正切值。下面的代码的执行结果如图4所示。
图4 参数不是数字时的执行结果
(完)
领取专属 10元无门槛券
私享最新 技术干货