如何证明逻辑运算符之后的表达式是否执行
在js中,证明逻辑运算符之后的表达式是否执行
本文实在node.js环境中,使用vi编辑器演示
&&
我们都知道&&为逻辑与,同真则真,有假则假;
当 exp1 && exp2 中的exp1为假,由于逻辑短路,不需要执行exp2,整个表达式结果为false。
例:
var gender = 'female'
var age = 13;
var result = gender == 'male' && age > 12;
问:age>12能否执行?如何证明?
答案肯定是否,证明如下:
var gender = 'female'
var age = 13
function foo(gender){
console.log("判断性别...")
return gender == 'male'
}
function bar(age){
console.log("比较年龄...")
return age > 12
}
if(foo(gender)&&bar(age)){
console.log("比较结束,结果为"+(gender=='male'&&age>12))
}else{
console.log("比较结束,结果为"+(gender=='male'&&age>12))
}
运行结果为:
||
||为逻辑或,同假则假,有真则真;
当 exp1 || exp2 中的exp1为真,由于逻辑短路,不需要执行exp2,整个表达式结果为true。
过程同&&,此处不做赘述。
&& 和 || 同时存在于一个表达式
测试如下:
function one(){
console.log("this is one!")
return false
}
function two(){
console.log("this is two")
return true
}
function three(){
console.log("this is three")
return three
}
if(one() && two() || three()){
console.log("测试结束,结果为真")
}else{
console.log("测试结束,结果为假")
}
运行结果:
分析:本例中,由于 && 和 || 的优先级相同,所以代码从左向右顺序执行,先执行one(),one()为false,逻辑短路了two(),执行了three(),并且执行结果最终是由three()决定的。
总结:
(1)当&&之前的表达式值为false,以及||之前的表达式值为true时,会发生逻辑短路,逻辑运算符后的表达式不会被执行。
(2)证明逻辑短路的方法:有效利用函数
如果大家还有什么疑问,欢迎探讨!