首页 > 技术文章 > 奇怪的逻辑运算

lijjj 2021-06-09 11:09 原文

逻辑运算符在运算时,有个规则:

1、当逻辑运算符前面的表达式(的值),能够决定整个表达式的结果时,那么最终表达式的结果就是前面表达式的结果,这就是逻辑短路。

2、当逻辑运算符前面的表达式(的值),不能决定整个表达式的结果时,那么最终表达式的结果就是后面表达式的结果

 

以下几种运算情况:

1、数字:非零为真,零为假。

2、字符串:空字符串是假,非空字符串是真

3、null:被认为是假

4、undefined:被认为是假

5、object类型:认为是真

 

以下为示例代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <input type="button" value="测试" onclick="testf()">
    
</body>
</html>
<script>
function testf(){
    //1)、数字:非零为真,零为假。
    console.log(true && 2);//2,因为,前面为true,与运算还得看后面的表达式,后面的表达式结果决定了整个表达式的结果。
    console.log(2 && true);//结果是true,因为,非零为true,所以,2是true,与运算,前面的表达式是为true时,后面的表达式的结果决定了整个表达式的结果
    console.log(2 && 1);//结果是1,因为,非零为true,所以,2是true,与运算,前面的表达式是为true时,后面的表达式的结果决定了整个表达式的结果
    console.log(true && 0);//0
    console.log(0 && true);//前面的0是假,所以,前面的表达式的结果为整个表达式的结果,所以是0。
   
    // 2)、字符串:空字符串是假,非空字符串是真
    console.log("hello" && false);//false;
    console.log("" && true);//"";
    console.log("hello" && true);//true;
    console.log(true && "hello");//"hello";
    console.log(true && "hello");//"hello";
 
    //3)、null:被认为是假
    console.log(null && false);//null;
    console.log(true && null);//null;
    console.log(false && null);//false;
 
    //4)、undefined:被认为是假
    console.log(undefined && false);//undefined;
    console.log(true && undefined);//undefined;
    console.log(false && undefined);//false;
 
    //5)、object类型:认为是真
    console.log({} && false);//false;
    console.log({} && true);//true;
    console.log(true && {});//{};
 
    //6)、数组:数组也是对象,认为是真
    console.log([] && false);//false;
    console.log([] && true);//true;
    console.log(true && []);//[];
}
 
</script>

 

推荐阅读