ES2016之求幂运算

290 阅读2分钟

这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

求幂运算

ES2016的标准增加了:exponentiation-operator即求幂运算,这篇文章我们就来了解一下什么是求幂运算。

我们可以利用求幂运算符(**)来进行求幂运算,它返回将第一个操作数加到第二个操作数的幂的结果。

如何使用

我们如果想求一个3的3次方,我们之前可以使用Math方法这样做,如下:

Math.pow(3,3); // 27

但是增加求幂运算后,我们还可以这样做,如下:

3 ** 3; //27

求幂运算符是是右结合的a ** b ** c 等于 a ** (b ** c),我们来看一下这个公式:

2 ** 3 ** 2; // 512

这个公式得出的结果是:512,不是我们习惯的先求出 2的3次方 ,然后再求 2次方。这是因为求幂运算符是是右结合的,也就是说我们要先求:3的2次方得9,再求2的9次方得512

注意事项

我们需要注意的是:

  1. 任何数的零次方都为1NaN也不例外,但是我们还要知道:NaN除了零次方外,其他次方都是它本身,如下:
NaN ** -1 ; NaN
NaN ** 0.1 ; NaN
NaN ** 1 ; NaN
NaN ** 2 ; NaN
NaN ** 3 ; NaN
  1. 我们需要知道它的结合运算,如下:
2 ** 3 ** 2   // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64

我们知道:a ** b ** c 等于 a ** (b ** c),也就是:2 ** 3 ** 2 等于 2 ** (3 ** 2),但如果我们想从左到右运算,我们就需要加上小括号:()

  1. 如果我们这样写: -2 ** 2 ,是会抛出一个错误的,错误提示如下:
Uncaught SyntaxError: Unary operator used immediately before exponentiation expression. Parenthesis must be used to disambiguate operator precedence

这是没有识别到优先级的原因,必须使用括号来消除运算符优先级的歧义,所以我们可以这样做:

-(2 ** 2) // -4
(-2) ** 2 // 4

当然加括号的位置不同,表达的意思也是不同的。

总结

在一般项目会很少用到计算幂方的方法,但是如果项目中牵涉到幂方运算的时候,我们就可以使用求幂运算符。

如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。