本文作者: 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())
可以被看作一个整体,作为条件语句。