关于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中的 || 和 && 以及三元运算符 ? : 的理解)