逻辑运算
此处省略
|| 代替 if 的用法
先看几个例子:
var x = 0||1; //1
0意味着false,而后面1意味着true,那么上面的结果应该是true,而事实返回的结果是1
var x = ''||1; //1
前面”是false,后面1是true,返回结果是1
var x = ''||0; //0
前面”是false,后面0同样是false,返回结果是0
var x = 0||''; //''
前面0是false,后面”是false,返回结果是”
var x = 2||1; //2
前面2是true,后面1也是true,返回结果是2
var x = 2||0; //2
前面2是true,后面0是false,返回结果是2
总结:
1.只要||前面是false,则不管后面,都返回"||"后面的值。
2.只要||前面是true,则不管后面,都返回"||"前面的值。
我们称这种为短路原理: 知道了前面第一个的结果就知道最后的输出,如果为第一个为:true,则取第一个的值,如果第一个为false,则取第二个的值。
请你一定要记住:在js逻辑运算中,0、”“、null、false、undefined、NaN都会判为false,其他都为true(好像没有遗漏了吧,请各位确认下)。这个一定要记住,不然应用||和&&就会出现问题。
&& 代替 if 的用法
var x = ''&&0; //''
前面为false,后面为false,返回前面
var x = ''&&1; //''
前面为false,后面为true,返回前面
var x = 1&&0; //0
var x = 1&&''; //''
前面为true,后面为false,返回后面
var x = 1&&2; //2
var x = 'a'&&1; //1
前面为true,后面为true,返回后面
短路原理:
1、只要“&&”前面是false,则不管后面,结果都将返“&&”前面的值;
2、只要“&&”前面是true,则不管后面,结果都将返“&&”后面的值;
在开发中的应用
1.下面3段代码等价
a=a||"defaultValue";
if(!a){
a="defaultValue";
}
if(a==null||a==""||a==undefined){
a="defaultValue";
}
2.像var Yahoo = Yahoo || {};这种是非常广泛应用的。
3.callback&&callback()
在回调中,经常这么写,更严谨,先判断 callback 是不是存在,如果存在就执行,这样写的目的是为了防止报错
如果直接写 callback(); 当callback不存在时代码就会报错。
代码理解
this.index == oBtn.length - 1 && (oDiv.style.cssText = "");
如果this.index == oBtn.length - 1 条件符合了
就执行 (oDiv.style.cssText = "");操作
等价于
if(this.index == oBtn.length - 1 ){
oDiv.style.cssText = ""
}
a() && b() :如果执行a()后返回true,则执行b()并返回b的值;如果执行a()后返回false,则整个表达式返回a()的值,b()不执行;
a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b()不执行;如果执行a()后返回false,则执行b()并返回b()的值;
&& 优先级高于 ||
参考:
https://www.jb51.net/article/88781.htm
https://www.cnblogs.com/kester/p/6231328.html
http://tieba.baidu.com/p/4138400001?traceid=