在 ES7 中,新增了指数运算符 **
,它可以简便地实现对数字的指数运算。这篇文章将会介绍这个运算符的使用方法和其他注意点。
基础使用方法
指数运算符 **
的基本语法如下:
base ** exponent
其中 base
表示底数,exponent
表示指数。例如:
let result = 2 ** 3; console.log(result); // 8
上面的代码中,2 ** 3
就等同于 2 * 2 * 2
,所以 result
的值就是 8
。
指数运算符的优先级
指数运算符的优先级比其他数学运算符都要高。例如:
let result1 = 2 * 3 ** 2; let result2 = (2 * 3) ** 2; console.log(result1); // 18 console.log(result2); // 36
上面的代码中,result1
的值为 18
,因为先计算了 3 ** 2
,最后再乘以 2
。而 result2
的值为 36
,因为用小括号明确指定了两个数相乘应先于指数运算。
负数指数的情况
指数运算符也可以用于负数指数的情况。例如:
let result = 2 ** -3; console.log(result); // 0.125
上面的代码中,2 ** -3
等价于 1 / (2 ** 3)
,所以 result
的值就是 0.125
。
大数的指数计算
在指数运算中,如果底数或指数过大,就有可能会出现 Infinity
或 -Infinity
的问题。例如:
let result = 10 ** 1000; console.log(result); // Infinity
上面的代码中,10 ** 1000
的值就是 Infinity
。
为了避免这种情况,可以使用 ES7 中新增的 Math.pow()
方法来进行指数计算。例如:
let result = Math.pow(10, 1000); console.log(result); // 1e+1000
上面的代码中,Math.pow(10, 1000)
的值是一个科学计数法表示的数字,它可以在 JavaScript 中正确地表示一个大数的指数计算结果。
与其他运算符的结合
指数运算符也可以和其他运算符一起使用,例如加、减、乘、除等运算符。例如:
let result1 = 2 + 3 ** 2; let result2 = (2 + 3) ** 2; let result3 = 10 / 2 ** 2; console.log(result1); // 11 console.log(result2); // 25 console.log(result3); // 2.5
上面的代码中,result1
的值为 11
,因为先计算了 3 ** 2
,再加上 2
;result2
的值为 25
,因为用小括号明确指定了两个数相加应先于指数运算。result3
的值为 2.5
,因为先计算了 2 ** 2
,再用 10
除以结果。
总结
指数运算符 **
的加入让 JavaScript 中的指数运算更加简便,并具有很好的优先级和与其他运算符的结合性。但是需要注意指数过大时的 Infinity 问题,可以使用 Math.pow()
方法来避免此类问题。
示例代码
-- -------------------- ---- ------- ------------- -- --- -- - ------------- - - -- --- -- -- -------------- - -- -- --- -- -- ------------- -- ---- -- ----- -------------- -- ------ -- -------- ------------------------ ------- -- ------- ------------- - - -- --- -- -- -------------- - -- -- --- -- -- -------------- - - -- --- -- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6501a80d95b1f8cacdf52a07