今天就来详细说说这两个逻辑符号的主要两种用法
- 普通用法 两边表达式做逻辑判断返回Boolean
.逻辑或 ||
console.log(10 > 5 || 5 < 10) //返回 true
总结:两边表达式只要有一边返回true,那么最终的结果就会返回true
用一句话说就是:一真即为真
.逻辑于 &&
consloe.log(10 > 5 && 5 < 10) // 返回false consloe.log(10 > 5 && 8 > 5) // 返回true
总结:
两边表达式只要有一边返回false,那么最终的结果就会返回false
只有两边表达式都是true的时候,才会返回true
-
高级用法 (短路原则用法) 此用法在于执行哪一边的表达式
一:&&的短路特性
真假:要使(表达式1)&&(表达式2) 输出结果为真,就要同时满足表达式1和表达式2都要为真。&&的短路特性意思为如果在运算过程中表达式1结果为假,这时输出结果一定为假,所以表达式2不在进行运算。因为结果不可能为真,这就是&&的短路特性。
执行:如果左边表达式为真,那么它就会执行右边表达式 -----左 && 右
二:||的短路特性
真假:要使(表达式1)||(表达式2) 输出结果为真,只需要满足表达式1和表达式2有一个为真即可。||的短路特性意思为如果在运算过程中表达式1结果为真,这时输出结果一定为真,所以表达式2不在进行运算。因为结果不可能为假,这就是||的短路特性。如果表达式1为假才进行表达式2的运算。
执行:如果左边表达式为假,那么它就会执行右边表达式 ------左 || 右
在js逻辑运算中,0、” “、null、false、undefined、NaN都会判为false,其他都为true
(
function() {
//验证短路特性
var i = 0;
var j = 0;
//验证&&的短路特性
if ( i+1 && j+1)
{
console.log('在if中执行');
console.log("验证&&的短路特性:i=%d j=%d \n", i, j);
}
else
{
console.log('在else中执行');
}
//验证||的短路特性
if (i+1 || j)
{
console.log('逻辑或');
console.log("验证||的短路特性:i=%d j=%d \n", i, j);
}
}
()
)
解释为什么打印出来i,j都是0:
这是因为var i,j的指向没有改变,if中只是做了判断,并没有给i赋值,所以ij变量的值没有改变还是原先的值(i = i + 1 要这样才会改变 它们的值)。我这里主要验证短路即表达式是否会执行。