你不知道的 JavaScript 系列中( 32 ) - 运算符的优先级

JavaScript 中的 && 和 || 运算符返回它们其中一个操作数的值,而非 true 或 false。在一个运算符两个操作数的情况下这比较好理解:
var a = 42;
var b = "foo";
a && b; // "foo"
a || b; // 42

 

那么两个运算符三个操作数呢?
var a = 42;
var b = "foo";
var c = [1,2,3];
a && b || c; // 'foo'
a || b && c; // 42
这说明 && 运算符先于 || 执行,而且执行顺序并非我们所设想的从左到右。原因就在于运 算符优先级。
对 && 和 || 来说,如果从左边的操作数能够得出结果,就可以忽略右边的操作数。我们将 这种现象称为“短路”(即执行最短路径)。



a ? b : c ? d : e;
? : 是右关联,它的组合顺序是以下哪一种呢?
• a ? b : (c ? d : e)
• (a ? b : c) ? d : e
答案是a ? b : (c ? d : e)

 

a && b || c ? c || b ? a : c && b : a
其中? :运算符的优先级比&&和||高还是低呢?执行顺序是这样?
a && b || (c ? c || (b ? a : c) && b : a)
还是这样?
(a && b || c) ? (c || b) ? a : (c && b) : a
答案是后者。因为&&运算符的优先级高于||,而||的优先级又高于? :

 

posted @ 2020-12-01 08:34  wzndkj  阅读(114)  评论(0编辑  收藏  举报