本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/11/10/%E6%9D%A1%E4%BB%B6%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E7%BB%93%E5%90%88%E6%80%A7/
摘要
本文主要讲述了:
- 什么是条件运算符
- 优先级和结合性
- 条件运算符的右结合性
- 条件运算符的左结合性
正文
什么是条件运算符
条件运算符是 JavaScript 中仅有的拥有 3 个操作数的运算符。
示例:若condition为 Truthy,则result为1;若condition为 Falsy,则result为2
1 | var condition = false; |
条件运算符可以视作条件语句的语法糖。
上述示例和以下写法是等效的。
1 | var condition = false; |
注意:在条件运算符内部,不管优先级如何,总是先执行条件语句,然后再根据条件语句的运算结果,执行对应的表达式。
示例:依次输出:”foo”、1
1 | function foo() { |
在这个示例中,虽然*和+的优先级比条件运算符高,但还是先执行条件语句,即foo()。
优先级和结合性
在计算机编程语言中,运算符存在两个特性,优先级和结合性。
优先级
优先级表示执行顺序的先后,优先级高的运算符先执行。
示例:
1 | var result = 1 + 2 * 3; |
由于乘法的优先级比加法高,所以上述示例可以看作:
1 | var result = 1 + 2 * 3; |
结合性
若运算符具有相同的优先级,由结合性来决定运算符的分组方式。
左结合为从左到右分组,右结合为从右到左分组。
左结合
示例:
1 | var result = 1 + 1 - 1; |
由于加法和减法的优先级相同,且都是左结合,所以上述示例可以看作:
1 | var result = 1 + 1 - 1; |
右结合
示例:
1 | var foo; |
由于赋值运算符是右结合,所以上述示例可以看作:
1 | var foo; |
条件运算符的右结合性
在 JavaScript 中,条件运算符是右结合的。
注意:在条件运算符内部,不管优先级如何,总是先执行条件语句,然后再根据条件语句的运算结果,执行对应的表达式。
示例:依次输出:”foo”、1
1 | function foo() { |
在上述示例中,根据右结合性,(bar() ? 2 : 3)可以被看作一个整体,作为foo()的else语句。在执行顺序上,虽然()的优先级比条件运算符高,但还是先执行条件语句,即foo()。
条件运算符的左结合性
在 PHP 中,条件运算符是左结合的。
注意:在条件运算符内部,不管优先级如何,总是先执行条件语句,然后再根据条件语句的运算结果,执行对应的表达式。
示例:依次输出:”foo”、2
1 |
|
在上述示例中,根据左结合性,(foo() ? 1 : bar())可以被看作一个整体,作为条件语句。
参考资料
本文作者: jsweibo
本文链接: https://jsweibo.github.io/2019/11/10/%E6%9D%A1%E4%BB%B6%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E7%BB%93%E5%90%88%E6%80%A7/
本文对你有帮助?请支持我