在各种框架中经常看到一些简便的或且表达式取值,比如:
var a = xx && obj.xx && win.xxx;
var b = xx || obj.xx || win.xxx;
这是什么意思呢,用过的人都知道,对于javascript而言,不一定是boolean才可以判断的,所有对象都可以判断,包括undefined,null等
以下是对JS6种类型的判
类型 | 条件判断为 |
---|---|
Function | True |
Undefined | False |
String | 空字符串为false,否则为true |
number | 0为false,其它为true |
boolean | true/false |
object | null为flase,不为空为true |
这样就可以看到这个意思了
比如:
var a = true && false && true; //即 a = false;
var b = true || false ||false; 即 b = true;
这个运算都知道 &&
从左到又遇到 false 就返回 ,||
是从左到右遇到 true 就返回,
所以 1里面的第三个true,和b里面的第二三个false是没有计算的,直接返回了最后判断的表达式。
好吧,再验证一下
false || 0 || ( 3 + 11 ) || ( 5 + 3 )
//-》14 算到第三个 ( true ) 就直接返回
false || 0 || undefined || null
//-》null返回算到的最后一项
4 && 6 && ( 5 - 5 ) && new Date()
//-》0 算到第三个(false)就直接返回
4 && 6 && 8 && new Date() && 50
//-》50 返回算到的最后一项
OK,说到这里