1. 基本概念
Math.asin()方法用于求一个数的反正弦值。它的语法形式如下所示:
Math.asin(x);
其中参数x应该是一个数字,即它的类型应该是Number。如果x不是Number类型的,那么它会先被强制类型转换为Number类型。
参数x代表的是某个角的正弦值,而Math.asin()方法返回的正是用弧度值表示的这个角。x应该处于 [-1, 1] 范围内,因为正弦值的取值范围是 [-1, 1]。
Math.asin()方法的返回值由下面的规则决定,规则中x的值指的是x被转换为Number类型后的值,如果它原本不是Number类型的话。
1. 如果x是NaN,那么结果是NaN;
2. 如果x大于1(包括正无穷Infinity),那么结果是NaN;
3. 如果x小于-1(包括负无穷-Infinity),那么结果是NaN;
4. 如果x是 0,那么结果是 0;
5. 如果x是-0,那么结果是-0;
6. x为其它 [-1, 1] 范围内的数字,结果是正弦值等于x的角的弧度值。
我们知道正弦函数是一个周期函数,即有多个角的正弦值是相同的。那么当我们指定一个正弦值的时候,Math.asin()方法会返回哪一个角呢?对此官方文档作了明确的规定,那就是Math.asin()方法返回的是 [-π / 2, π / 2] 范围内的角。
2. 示例
2.1 参数为[-1, 1]内的数字
因为Math.asin()方法的参数的合法范围是 [-1, 1] ,所以我们先来看看参数正确的情况下Math.asin()方法的作用。虽然 0和-0也是这一范围内的数字,但这里我们先不考虑它们,而是把它们留到第3个例子中。本示例的执行结果如图1所示。
<script>
var value1 = Math.asin(-1);
console.log("Math.asin(-1) = " value1);
var value2 = Math.asin(1);
console.log("Math.asin(1) = " value2);
var value3 = Math.asin(0.5);
console.log("Math.asin(0.5) = " value3);
</script>
图1 参数在[-1, 1]内的情况
2.2 参数为[-1, 1]外的数字
我们再来看看参数在 [-1, 1] 范围之外时,Math.asin()的返回值。同样的,这里我们先不考虑正无穷和负无穷(Infinity和-Infinity)而是将它们留到示例3中进行展示。下面代码的执行结果如图2所示。
<script>
var value1 = Math.asin(6);
console.log("Math.asin(6) = " value1);
var value2 = Math.asin(38.2);
console.log("Math.asin(38.2) = " value2);
var value3 = Math.asin(-5);
console.log("Math.asin(-5) = " value3);
var value4 = Math.asin(-71.4);
console.log("Math.asin(-71.4) = " value4);
</script>
图2 参数在[-1, 1]外的情况
2.3 参数为特殊数字
JavaScript中有几个特殊的数字,它们分别是 0、-0、Infinity、-Infinity和NaN。本示例演示的就是以这些特殊数字为参数而调用Math.asin()方法的效果,它们的执行结果如图3所示。
注意在该示例中,我们用单独的一条打印语句来打印参数为-0的结果。这是因为如果用同一条打印语句来同时打印提示字符串和结果值,那么结果值-0在转换成字符串后就变成了0( 0),打印出的信息会错误地显示-0的反正弦值为0( 0)。
同样的,我们也用单独的一条打印语句来打印参数为 0的结果。这是为了说明Math.asin( 0)的结果确实为 0(0),而不是-0转换为字符串而得来的。
<script>
var value1 = Math.asin(NaN);
console.log("Math.asin(NaN) = " value1);
var value2 = Math.asin( 0);
console.log("Math.asin( 0)的值在下面一行单独打印: ");
console.log(value2);
var value3 = Math.asin(-0);
console.log("Math.asin(-0)的值在下面一行单独打印:");
console.log(value3);
var value4 = Math.asin(Infinity);
console.log("Math.asin(Infinity) = " value4);
var value5 = Math.asin(-Infinity);
console.log("Math.asin(-Infinity) = " value5);
</script>
图3 参数为特殊数字的情况
2.4 参数不为数字
最后,我们再来看看Math.asin()的参数不是Number类型的情形。此时参数会先被转换为Number类型,再对该数字求反正弦值,该示例的执行结果如图4所示。
在该示例中,我们同样单独的打印参数为null的结果。这么做的原因也是为了说明Math.asin(null)的结果确实是 0(0),而不是-0转换为字符串而得来的。
<script>
/* 字符串"0.5"转换成数字为0.5 */
var value1 = Math.asin("0.5");
console.log('Math.asin("0.5") = ' value1);
/* document对象转换成数字为NaN */
var value2 = Math.asin(document);
console.log("Math.asin(document) = " value2);
/* null转化成数字为0( 0) */
var value3 = Math.asin(null);
console.log("Math.asin(null)的值在下面一行单独打印:");
console.log(value3);
/* 布尔值true转换成数字为1 */
var value4 = Math.asin(true);
console.log("Math.asin(true) = " value4);
</script>
图4 参数不是数字的情况
(完)
,