JavaScript中烧脑的&&和||

在js中常常能看到如下的写法:javascript

var obj1 = a || b || c;
var obj2 = a && b && c;

刚看到时,很容易认为返回的两个变量都是 boolean 类型,但实际上返回的倒是 a、b、c的其中之一。java

其实这是一种相对安全而且高效的适配写法,能够避免过多的 if 判断,使代码看上去更简洁。安全

 

首先,|| 和 && 比较抽象的逻辑是:spa

一、a || b,若是a不存在,则返回bcode

二、a && b,若是a存在,则返回b,不然返回a对象

这种逻辑理解起来确实有点抓狂blog

 

本质是什么呢?
&& 和 || 的做用只有一个:进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果以后,就返回哪一个变量

在javascript中:
如下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
其余都是true。注意:字符串"false"也会被当作true处理,在未转型的状况下他是字符串,属于一个对象,因此是true。

因此:
a || b:     若是a是true,那么b无论是true仍是false,都返回true。所以不用判断b了,这个时候恰好判断到a,所以返回a。
                若是a是false,那么就要判断b,若是b是true,那么返回true,若是b是false,返回false,其实不就是返回b了吗。ip


a && b:  若是a是false,那么b无论是true仍是false,都返回false,所以不用判断b了,这个时候恰好判断到a,所以返回a。
                若是a是true,那么就要在判断b,和刚刚同样,无论b是true是false,都返回b。字符串

相关文章
相关标签/搜索