逻辑与和或
逻辑与
当 && 前后两个操作数都是布尔值,无可厚非,同时为true才为true。与其他强类型语言不同的是,javascript逻辑与前后的操作数可以应用于任何类型。
而且,在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。
如果第一个操作数是对象,则返回第二个操作数
2 //返回 字符串:"this is the secondObject" 3 function LogicAnd1(){ 4 5 var firstObject ={ 6 valueOf:function(){ 7 return 1; 8 } 9 }; 10 11 var secondObject ="this is the secondObject"; 12 13 return firstObject && secondObject; 14 }
如果第二个操作数是对象,则只有在第一个操作数的求值为true的情况下才返回该对象
1 //firstObject 为true 返回该对象 2 //firstObject 为false 返回false 3 function LogicAnd2(){ 4 var secondObject ={ 5 valueOf:function(){ 6 return 1; 7 } 8 }; 9 10 var firstObject =false; 11 12 return firstObject && secondObject; 13 }
如果两个都是对象{null 也是object,此处为非null对象},则返回第二个
1 返回第二个 2 function LogicAnd3(){ 3 var firstObject ={myName:"first"}; 4 var secondObject ={myName:"second"}; 5 6 return firstObject && secondObject; 7 }
任意一个为null,NaN,undefined 结果为null,NaN,undefined
1 //任意一个为null 结果为null 2 function LogicAnd4(){ 3 var firstObject =null; 4 var secondObject ={myName:"second"}; 5 6 return firstObject && secondObject; 7 } 8 9 //任意一个为Nan 结果为Nan 10 function LogicAnd5(){ 11 var firstObject =NaN; 12 var secondObject ={myName:"second"}; 13 14 return firstObject && secondObject; 15 } 16 17 //任意一个为undefined 结果为undefined 18 function LogicAnd6(){ 19 var firstObject =undefined; 20 var secondObject ={myName:"second"}; 21 22 return firstObject && secondObject; 23 }
逻辑或
逻辑或同样可以应用在任意两个类型当中,其中:
第一个为对象,则返回第一个对象
1 function LogicOr1(){ 2 var firstObject ={ 3 valueOf:function(){ 4 return 1; 5 } 6 }; 7 8 var secondObject ="this is the secondObject"; 9 10 return firstObject || secondObject; 11 12 }
如果第二个操作数是对象,则只有在第一个操作数的求值为false的情况下才返回该对象
1 //firstObject 求值为false 返回该对象 2 //firstObject 求值为true 返回firstObject 3 function LogicOr2(){ 4 var secondObject ={ 5 valueOf:function(){ 6 return 1; 7 } 8 }; 9 10 var firstObject =1000; 11 12 return firstObject || secondObject; 13 14 } 15
如果两个都是对象{null 也是object,此处为非null对象},则返回第一个
1 function LogicOr3(){ 2 var firstObject ={myName:"first"}; 3 var secondObject ={myName:"second"}; 4 //返回第一个 5 return firstObject || secondObject; 6 }
两个都为null,undefined,NaN 则结果都为以上上个值
1 //两个为null 结果为null 2 function LogicOr4(){ 3 var firstObject =null; 4 var secondObject =null; 5 6 return firstObject || secondObject; 7 } 8 9 //两个为Nan 结果为Nan 10 function LogicOr5(){ 11 var firstObject =NaN; 12 var secondObject =NaN; 13 14 return firstObject || secondObject; 15 } 16 17 //两个为undefined 结果为undefined 18 function LogicOr6(){ 19 var firstObject =undefined; 20 var secondObject =undefined; 21 22 return firstObject || secondObject; 23 }