关于js中的|关于js中的 || 和 && 以及三元运算符 ? : 的理解

相信很多人在面试的时候都会遇到笔试题,而逻辑运算笔试题是必考题,比如下面这种类型:

var a = 42; var b = "foo"; var c = false; var d = a && b || c ? c || b ? a : c && b : a; d;

拿到这种题,我们首先不要慌,好好的回想一下这里所涉及到的知识点:
1. && 运算符的优先级高于 ||,而 || 的优先级又高于? : 。
所以我们对它进行第一次分解:
((a && b) || c )? (c || b) ? a : (c && b) : a
2. ? : 是右关联。
例如:a ? b : c ? d : e;
也就是说以上的组合顺序是这样的:
a ? b : (c ? d : e);
因此可以再做一次分解:
((a && b) || c )? ((c || b) ? a : (c && b)) : a
3. 对于||来说,如果条件判断结果为true就会返回第一个操作数的值,如果为false就会返回第二个操作数的值;
例如:a || b
如果判断结果为true,则返回a 的值,相当于:
a ? a : b ;
4. 对于&&来说,如果条件判断结果为true就会返回第二个操作数的值,如果为false就会返回第一个操作数的值;
例如:a && b
如果判断结果为true,则返回 b 的值,相当于:
a ? b: a;
所以,a && b 结果为“foo”;
“foo”|| c 的结果为 “foo”;
第一个?中, “foo”为真值,因此走((c || b) ? a : (c && b));
c || b 的结果为 “foo”;
第二个?中,“foo”为真值,因此走 a ,a的值为42。
所以最后结果为42。


【关于js中的|关于js中的 || 和 && 以及三元运算符 ? : 的理解】

    推荐阅读