ES11 中的运算符优先级与关联性:什么时候使用圆括号

阅读时长 12 分钟读完

在 JavaScript 中,运算符的优先级和关联性是非常重要的概念。它们决定了表达式的计算顺序,从而影响程序的正确性和性能。在 ES11 中,新增了一些运算符,例如可选链和空值合并运算符,它们的优先级和关联性也有所不同。本文将详细介绍 ES11 中运算符的优先级和关联性,并提供一些使用圆括号的指导意义和示例代码。

运算符优先级

在 JavaScript 中,运算符的优先级是指它们在表达式中的计算顺序。例如,乘法运算符的优先级高于加法运算符,因此表达式 1 + 2 * 3 的计算顺序是先计算 2 * 3,再加上 1,结果为 7。ES11 中新增的运算符如下表所示,优先级从高到低排列。

运算符 描述 关联性
() 圆括号 从左到右
newsuper.[]()?.new.target 成员访问、函数调用、可选链、new.target 从左到右
++-- 前置和后置自增自减 从右到左
!~+-typeofvoiddelete 一元运算符 从右到左
** 指数运算符 从右到左
*/% 乘法、除法、取余 从左到右
+- 加法、减法 从左到右
<<>>>>> 位运算 从左到右
<<=>>=ininstanceof 比较运算符、in 运算符、instanceof 运算符 从左到右
==!====!== 相等运算符 从左到右
& 按位与 从左到右
^ 按位异或 从左到右
` ` 按位或
&& 逻辑与 从左到右
` `
?? 空值合并运算符 从左到右
? : 条件运算符 从右到左
yieldyield*asyncawait 生成器和异步函数的运算符 从右到左

从表中可以看出,圆括号的优先级最高,因此在表达式中使用圆括号可以改变计算顺序。例如,表达式 (1 + 2) * 3 的计算顺序是先计算 (1 + 2),再乘上 3,结果为 9。在使用圆括号时,需要注意它们的数量和位置,以确保表达式的正确性。

运算符关联性

在 JavaScript 中,运算符的关联性是指它们在表达式中的结合方式。例如,加法运算符的关联性为从左到右,因此表达式 1 + 2 + 3 的计算顺序是先计算 1 + 2,再加上 3,结果为 6。ES11 中新增的运算符的关联性如下表所示。

运算符 描述 关联性
() 圆括号 从左到右
newsuper.[]()?.new.target 成员访问、函数调用、可选链、new.target 从左到右
++-- 前置和后置自增自减 从右到左
!~+-typeofvoiddelete 一元运算符 从右到左
** 指数运算符 从右到左
*/% 乘法、除法、取余 从左到右
+- 加法、减法 从左到右
<<>>>>> 位运算 从左到右
<<=>>=ininstanceof 比较运算符、in 运算符、instanceof 运算符 从左到右
==!====!== 相等运算符 从左到右
& 按位与 从左到右
^ 按位异或 从左到右
` ` 按位或
&& 逻辑与 从左到右
` `
?? 空值合并运算符 从左到右
? : 条件运算符 从右到左
yieldyield*asyncawait 生成器和异步函数的运算符 从右到左

从表中可以看出,大多数运算符的关联性都是从左到右。这意味着,当表达式中有多个相同优先级的运算符时,它们将按照从左到右的顺序计算。例如,表达式 1 + 2 + 3 的计算顺序是先计算 1 + 2,再加上 3,结果为 6。在使用多个相同优先级的运算符时,需要注意它们的顺序,以确保表达式的正确性。

使用圆括号的指导意义

在 JavaScript 中,使用圆括号可以改变运算符的优先级和关联性,从而影响表达式的计算顺序。为了提高代码的可读性和正确性,我们应该根据需要使用圆括号。以下是一些使用圆括号的指导意义。

1. 改变优先级

当表达式中有多个运算符时,可以使用圆括号改变它们的优先级。例如,表达式 (1 + 2) * 3 的计算顺序是先计算 (1 + 2),再乘上 3,结果为 9。如果没有使用圆括号,表达式 1 + 2 * 3 的计算顺序是先计算 2 * 3,再加上 1,结果为 7

2. 明确关联性

当表达式中有多个相同优先级的运算符时,可以使用圆括号明确它们的关联性。例如,表达式 1 + 2 + 3 的计算顺序是先计算 1 + 2,再加上 3,结果为 6。如果没有使用圆括号,表达式 1 + (2 + 3) 的计算顺序是先计算 2 + 3,再加上 1,结果也为 6

3. 提高可读性

使用圆括号可以提高代码的可读性,使表达式更加清晰。例如,表达式 a + b * c 可以写成 (a + b) * c,这样更容易理解它的含义。

4. 避免错误

使用圆括号可以避免一些常见的错误,例如忘记运算符的优先级或关联性。例如,表达式 a + b * c 可能会被误写成 a * b + c,这样会产生错误的结果。

示例代码

以下是一些使用圆括号的示例代码,它们演示了如何改变运算符的优先级和关联性。

1. 改变优先级

2. 明确关联性

3. 提高可读性

4. 避免错误

结论

在 ES11 中,运算符的优先级和关联性决定了表达式的计算顺序。使用圆括号可以改变运算符的优先级和关联性,从而影响表达式的计算顺序。为了提高代码的可读性和正确性,我们应该根据需要使用圆括号,避免常见的错误。希望本文能够帮助读者更好地理解 ES11 中运算符的优先级和关联性,提高 JavaScript 编程能力。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675aa9d64b9d41201aba4918

纠错
反馈