我们先看一下这道题,d等于多少?
var a = 42;
var b = "foo";
var c = false;
var d = a && b || c ? c || b ? a : c && b : a;
console.log(d);//42
首先我们先翻译一下将
var d = a && b || c ? c || b ? a : c && b : a
翻译成,增加可读性读
var d = ((a && b) || c) ? ((c || b) ? a : (c && b)) : a
(a && b) || c)
是true
, (c || b)
是true
,所以d=a
,也就是42。
其中有意思的是(c && b)
,我们声明一个变量直接等于它,看是什么?
let s=c && b;
console.log(s);//false
打印出来的是false
,我们再声明一个变量
let x=a && b;
console.log(foo);//"foo"
打印出来的是"foo",为什么呢?因为c && b
中c
是false
,所以不会往后走了,而a && b
中的a
是true
,所以还会往下走继续判断b
,最终结果就是"foo"
网友评论