关于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。

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值