关于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中的 || 和 && 以及三元运算符 ? : 的理解】
推荐阅读
- 热闹中的孤独
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- JS中的各种宽高度定义及其应用
- 眼光要放高远
- 樱花雨
- 前任