指数运算符(Exponentiation operator) **
是 ES2016 引入的一个运算符,用于指数运算。
有两种使用场景:x ** y
及 x **= y
(等价于 x = x ** y
)。
将代码 转译成 ES5 后,得:
// x ** y 的ES5 实现
Math.pow(x, y);
// x **= y 的 ES5 实现
x = Math.pow(x, y);
我们来分析其实现。
ES2016 之前,已经提供了 Math.pow()
方法实现指数运算,因此功能上 **
等价于 Math.pow()
,也就可以使用后者来替代前者了。
之所以引入这个运算符,基于两点考虑:
- 常用运算:指数运算常用于数学、物理和机器人技术领域;
- 语法简洁:
**
的写法比函数表示法更简洁,也更受欢迎(Python、Ruby 等语言均采用了这种写法)。