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所示,根據該圖像可以更好地理解以上這些規則的原理。

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|x≠(π/2)+kπ,k∈Z},也就是參數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 參數為特殊數字
之後,我們再來看看參數為NaN、+0、-0、+Infinity和-Infinity這5個特殊數字時的情況,此時對應上面的第1至第4條規則;它們的執行結果如圖3所示。
這裡要注意的是,在JavaScript中顯示正數的時候通常不顯示它的正號;所以,當我們列印值為+0的結果時(圖3中的第二個列印結果),你看到的顯示結果為0。

2.3 參數不為數字
最後,再讓我們來看看參數不是數字的情況;此時,參數會先被自動轉換為數字,再對該弧度值求其正切值。下面的代碼的執行結果如圖4所示。

(完)