短路运算

以下代码讲述javascript逻辑运算符&&和||短路运算的执行结果和总结。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>短路运算</title>

    <script>
        // &&短路现象
        // &&的执行结果是只要有一个转化为布尔值是false,最终的结果都是false
        console.log(true && true); //true
        console.log(true && false); //false
        console.log(false && true); //false
        console.log(false && false); //false
        console.log("-----------------");

        // &&的短路现象是指多个值,隐式转换成布尔值去比较,第一个转化成布尔值为false的,就是运行结果,后面的都不运行了
        console.log(0 && true);//0
        console.log(1 && 0); //0
        console.log(NaN && 1 && 100 && 1000); //NaN
        console.log(1 && null && 100 && 1000); //null
        // 如果前面转化成布尔值都为true,则最终结果是最后一个值
        console.log(2 && 1 && 1000 && 100); //100
        console.log("-----------------");

        // ||短路现象
        // ||的执行结果是只要有一个转化为布尔值是true,最终的结果都是true
        console.log(true || false);//true
        console.log(false || true);//true
        console.log(true || true);//true
        console.log(false || false);//false

        console.log("-----------------");

        // ||的短路现象是指多个值,隐式转换成布尔值去比较,第一个转化成布尔值为true的,就是运行结果,后面的都不运行了
        console.log(1 || false); //1
        console.log(false || 2);//2
        console.log(100 || 200 || 0 || null); //100
        console.log(0 || 88 || null || 200 || 555 || 666 || 300); //88

        // 如果前面转化成布尔值都为false,则最终结果是最后一个值
        console.log(0 || null); //null
        console.log(null || 0 || undefined || NaN || false || 300); //300

        console.log("-----------------");

        // &&和||的短路现象
        console.log(100 && 0 || 77 && 88 || null && NaN || 0);//88
        // console.log(true && false || true && true || false && false || false);
        // console.log(false || true || false || false); 
        console.log(8 || 9 || 0 && 2 || null && 99 || 88 && 65);//8
        //console.log(true || true || false && true || false && true || true && true);
        console.log(0 || null || 88 && 99 || NaN && 78 || 77 && 99 && 200); //99
        // console.log(false || false || true && true || false && true || true && true && true); 
        console.log(0 || null || 88 && 0 || NaN && 78 || 77 && 99 && 200); //200
        // console.log(false || false || true && false || false && true || true && true && true);
        // console.log(false || false || false || true || true && true && true);
        console.log(0 || null || 88 && 0 || NaN && 78 || null && 0 && 200); //null
        // console.log(false || false || true && false || false && true || false && false && true);
        // console.log(false || false || false || false || false && false && true); 
        console.log(0 || null || 88 && 0 || NaN && 78 || 1 && 0 && 200); //0
        // console.log(false || false || true && false || false && true || true && false && true);
        // console.log(false || false || false || false || true && false && true); 
        console.log(0 || null || 88 && 0 || NaN && 78 || 100 && 99 && null); //null
        //console.log(false || false || true && false || false && true || true && true && false);
        //console.log(false || false || false || false || false);

        // 总结:
        // 当&&和||同时出现的时候,先把所有内容转化成布尔值
        // 再把&&按照&&短路现象规则,算出&&的结果
        // 短路运算的最终结果是只剩下||运算符的时候,第一个能出现true的值
        // 如果只剩下||运算符的时候,前面都没有出现true,则最终结果是最后一个值

    </script>
</head>
<body>

</body>
</html>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容