运算符优先级

您所在的位置:网站首页 公式运算符的优先顺序 运算符优先级

运算符优先级

2023-12-22 16:33| 来源: 网络整理| 查看: 265

考虑由下面的表示法描述的表达式。其中,OP1 和 OP2 都是操作符的占位符。

jsa OP1 b OP2 c

如果 OP1 和 OP2 具有不同的优先级(见下表),则优先级最高的运算符先执行,不用考虑结合性。观察乘法如何具有比加法更高的优先级并首先执行,即使加法是首先写入代码的。

jsconsole.log(3 + 10 * 2); // 输出 23 console.log(3 + 10 * 2); // 输出 23 因为这里的括号是多余的 console.log((3 + 10) * 2); // 输出 26 因为括号改变了优先级

左结合(左到右)相当于把左边的子表达式加上小括号 (a OP b) OP c,右结合(右到左)相当于 a OP (b OP c)。赋值运算符是右结合的,所以你可以这么写:

jsa = b = 5; // 相当于 a = (b = 5);

预期结果是 a 和 b 的值都会成为 5。这是因为赋值运算符的返回结果就是赋值运算符右边的那个值,具体过程是:首先 b 被赋值为 5,然后 a 也被赋值为 b = 5 的返回值,也就是 5。

另一个例子是,只有幂运算符是右结合的,而其他算术运算符都是左结合的。有趣的是,无论结合性和优先级如何,求值顺序总是从左到右。

代码 输出 jsfunction echo(name, num) { console.log("Evaluating the " + name + " side"); return num; } // 注意这里的除法运算符 (/) console.log(echo("left", 6) / echo("right", 2)); Evaluating the left side Evaluating the right side 3 jsfunction echo(name, num) { console.log("Evaluating the " + name + " side"); return num; } // 注意这里的幂运算符 (**) console.log(echo("left", 2) ** echo("right", 3)); Evaluating the left side Evaluating the right side 8

当有多个具有相同优先级的运算符时,结合性的差异就会发挥作用。仅使用一个或多个不同优先级的运算符时,结合性不会影响输出,如上面的例子所示。在下面的示例中,观察使用多个相同运算符时结合性会如何影响输出。

代码 输出 jsfunction echo(name, num) { console.log("Evaluating the " + name + " side"); return num; } // 注意这里的除法运算符 (/) console.log(echo("left", 6) / echo("middle", 2) / echo("right", 3)); Evaluating the left side Evaluating the middle side Evaluating the right side 1 jsfunction echo(name, num) { console.log("Evaluating the " + name + " side"); return num; } // 注意这里的幂运算符 (**) console.log(echo("left", 2) ** echo("middle", 3) ** echo("right", 2)); Evaluating the left side Evaluating the middle side Evaluating the right side 512 jsfunction echo(name, num) { console.log("Evaluating the " + name + " side"); return num; } // 注意这里左边和中间的被圆括号包围的求幂表达式 console.log((echo("left", 2) ** echo("middle", 3)) ** echo("right", 2)); Evaluating the left side Evaluating the middle side Evaluating the right side 64

观察上面的代码片段,6 / 3 / 2 与 (6 / 3) / 2 是相同的,因为除法是左结合的。而幂运算符是右结合的,所以 2 ** 3 ** 2 与 2 ** (3 ** 2) 是相同的。因此,(2 ** 3) ** 2 会更改执行顺序,并导致输出上表中的 64。

请记住,判断执行顺序的时候,优先级在结合性之前。所以,混合求除法和幂时,求幂会先于除法。例如,2 ** 3 / 3 ** 2 的结果是 0.8888888888888888,因为它相当于 (2 ** 3) / (3 ** 2)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3