1. 基本概念

Math.log1p()方法的作用和Math.log()方法非常相近,它们都是用于计算一个数的自然对数。自然对数就是以自然常数e为底数的对数,在数学上也等价地表示为ln(x)。

调用Math.log1p()方法的语法形式如下所示:

Math.log1p(x);

上面我们说到了Math.log1p()和Math.log()的相同之处,那么它们又有什么不同呢?区别就在于它们各自是对哪一个数求自然对数,这个数和它们的参数有什么关系。

我们将Math.log1p()的方法名分成三部分,分别为:log、1和p。其中log就是“求对数”的意思,1就是数字1;而p表示“plus”,即加法。因此Math.log1p()中的1p就表示“1加上”的意思,那么到底加上什么呢?当然就是后面括号中的参数了。所以Math.log1p()就是先计算1加上它的参数的和,再计算该和的自然对数。

Math.log()方法名中没有1p,也就是不需要加1而直接对它的参数求自然对数,因此Math.log(x)等于ln(x)而Math.log1p(x)等于ln(1+x)。

对参数x的要求就是它应该是一个数字,即x属于Number类型;如果不是,那么它会先被自动转换为Number类型。

图1 ln(1+x)的函数图像

图1展示了ln(1+x)的函数图像,结合该图像以及当参数x为特殊值时,我们来详细说明JavaScript是如何判定Math.log1p()方法的结果的。

1. 如果x是NaN,那么结果是NaN;

2. 如果x小于-1,那么结果是NaN;因为此时x在函数的定义域之外;

3. 如果x是-1,那么结果是负无穷(-Infinity);严格来说此时x也在函数定义域之外,但JavaScript这样处理也说得过去,因为当x趋近于-1时ln(1+x)趋近于负无穷;

4. 如果x是+0,那么结果是+0;

5. 如果x是-0,那么结果是-0;

6. 如果x是正无穷(+Infinity),那么结果是正无穷;

7. 其余情况下,x是普通数字并且在函数的定义域内,因此结果就是ln(1+x)的值。

如果你传递的x不是数字,那么上面这些规则中提到的x的值指的是它被转换为数字后的值。这些规则看似很多、很杂乱,但它们在本质上都是计算函数ln(1+x)的值,结合函数图像以及JavaScript有五个特殊数字(NaN、+0、-0、正无穷和负无穷)可以很容易地理解它们。

2. 示例

以上代码的执行结果如图2所示:

图2 Math.log1p()方法的执行结果

(完)