这是我参与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,NaN也不例外,但是我们还要知道:NaN除了零次方外,其他次方都是它本身,如下:
NaN ** -1 ; NaN
NaN ** 0.1 ; NaN
NaN ** 1 ; NaN
NaN ** 2 ; NaN
NaN ** 3 ; NaN
- 我们需要知道它的结合运算,如下:
2 ** 3 ** 2 // 512
2 ** (3 ** 2) // 512
(2 ** 3) ** 2 // 64
我们知道:a ** b ** c 等于 a ** (b ** c),也就是:2 ** 3 ** 2 等于 2 ** (3 ** 2),但如果我们想从左到右运算,我们就需要加上小括号:()。
- 如果我们这样写:
-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+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。