你不知道的 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
答案是后者。因为&&运算符的优先级高于||,而||的优先级又高于? :