&&的优先级比||的优先级高
逻辑与
tip1:逻辑与操作可以应用于任何类型的操作数,在有一个操作数不是布尔值时,不一定返回Boolean值,大概的规则如下:
1、第一个操作数是对象,则返回第二个操作数;
2、第二个操作数为对象时,则只有在第一个操作数的求值结果为true时才返回该对象
3、如果两个操作数都是对象,则返回第二个操作数;
4、第一个操作数为null时,则返回null;
5、第一个操作数为NaN时,则返回NaN;
6、第一个操作数为undefined时,则返回undefined;
tip:如果第一个操作数求值结果为false,后面的操作数都不会去判断执行,不管第二个操作数为什么值,最终结果都不会是true
tip:返回第二个操作数(大多数情况下)
见代码,大概举一个例子验证下:
var obj={
"name":"zhan",
"age":25
}
var obj1={
"name":"hui",
"age":25
}
var boolean_0=false;
var boolean_1=true;
var null_=null;
var isNan=NaN;
var str='zhan'
var undefined_=undefined;
var num_0=0;
var num_1=1;
console.log(obj&&boolean_1)//true
console.log(obj&&boolean_0)//false
console.log(obj&&null_)//null
console.log(obj&&isNan)//NaN
console.log(obj&&str)//'zhan'
console.log(obj&&undefined_)//undefined
console.log(obj&&obj1)//obj1
console.log(obj&&num_0)//0
console.log(obj&&num_1)//1
console.log(null_&&num_1)//null
console.log(isNan&&num_1)//NaN
console.log(undefined_&&num_1)//undefined
逻辑或
tip:返回第一个操作数(大多数情况下) 1、第一个操作数为对象,则返回第一个操作数;
2、第一个操作数的求值结果为false,则返回第二个操作数;
3、两个都是对象,则返回第一个操作数;
4、两个操作数都是null,则返回null;
5、两个操作数都是NaN,则返回NaN;
6、两个操作数都是undefined,则返回undefined;
见例子:
console.log(obj||boolean_1)//obj
console.log(obj||boolean_0)//obj
console.log(obj||null_)//obj
console.log(obj||isNan)//obj
console.log(obj||str)//obj
console.log(obj||undefined_)//obj
console.log(obj||obj1)//obj
console.log(obj||num_0)//obj
console.log(obj||num_1)//obj
console.log(null_||null_)//null
console.log(isNan||isNan)//NaN
console.log(undefined_||undefined_)//undefined