1、逻辑与(&&)
(1)对于布尔值,只有都为true才返回true,只要有一个false,就返回false;
(2)对于不是布尔值的情况则:
var obj={};
console.log(obj && null); //null
console.log(null && obj); //null
console.log(obj && undefined) //undefined
console.log(undefined && obj); //undefined
console.log(obj && NaN); //NaN
console.log(NaN && obj); //NaN
var obj2={} ; var a=(obj && obj2);
console.log(a); //{} 返回第二个obj2{}
console.log(a==obj2); //true
( 3 ) 对于逻辑与的短路问题:
对于逻辑与,如果第一个操作数是false,无论第二个操作数是什么,结果都不可能再是true。
var found=true; var result=(found && someUdefinedVariable); console.log(result); //显示someUdefinedVariable
//例子中的found为true,所以会对someUdefinedVariable继续求值,但是该变量未定义,所以会提示错误
var found=false; var result=(found && someUdefinedVariable); console.log(result); //显示false
//例子中的found为false,所以第一个操作数就已经能够决定结果,就不会在对第二个操作数求值
2.逻辑或(||)
(1)对于布尔值,逻辑或是非常简单的,只要有一个true,就返回true;
(2)对于不是布尔值的情况则:
var found=true;
var result=(found || someUdefinedVariable);
console.log(result); //true
//对于逻辑或,当一个为true的时候,就不会在对第二个操作数进行求值了
console.log('' == false); //true
console.log('' || '- - '); //‘- -’ 相当于false || ‘- -’
3.逻辑非(!)
var obj = {id:1,name:'tom'}; console.log(!obj); //false
var obj = ''; console.log(!obj); //true
var obj = 'tom'; console.log(!obj); //false
var obj = 0; console.log(!obj); //true
var obj = 5; console.log(!obj); //false
var obj = null; console.log(!obj); //true
var obj = NaN; console.log(!obj); //true
var obj = undefined; console.log(!obj); //true
注:逻辑与,逻辑非都是从左向右判断,谁的第一个逻辑判断为true就显示谁,只不过逻辑非必须两个都为true,而且谁是第一个false就显示谁。