javascript 短路原理

  • 短路

在javascript中看到短路资格字眼的机会太多了,但是一直没有静下心来思考这个在平时写代码中会用到很多的知识点,首先我想到一个问题,我什么叫短路,如果有机会获得100块钱,你有2中方案获得这100块钱,A方案中你直接拿走这100块钱,B方案被抽一巴掌拿走这100块钱,正常人选A,选B的return。

短路一词源于物理,通过将导线直连阴极和阳级,就会产生短路,就算你同时用一根带灯泡的电线连接阳极个阴极还是短路,所以短路是大自然的规律。

  • js在什么情况下会短路

js 在 || && 运算符中会发生短路,我们测试一下所有的情况:

        // 测试短路原理
        var aT = function() {
            console.log('===============aT');
            return 5;
        };

        var aF = function() {
            console.log('===============aF');
            return null;
        }

        console.log('******||******'+(aT() || aF()));
        console.log('******||******'+(aT() || aT()));
        console.log('******||******'+(aF() || aF()));
        console.log('******||******'+(aF() || aT()));

        console.log('******&&******'+(aT() && aF()));
        console.log('******&&******'+(aT() && aT()));
        console.log('******&&******'+(aF() && aF()));
        console.log('******&&******'+(aF() && aT()));

我们通过或运算符和与运算符的计算可以知道,在或运算符下,只要有一侧为true,那就是true,在与运算符下,有一侧为false则都为false,或与与运算符都是按照从左到右的顺序进行计算的,所以在左侧有决定性的值出现的时候,右侧的值就没有必要计算了,这样的情况下,计算返回的结果都为左侧的结果。

如果左侧的计算结果不能决定所有的计算结果,则右侧还要继续计算,并且会返回右侧的结果,所以最终的计算结果并不是Boolean,这与数学中的符号计算还是有区别的,我们要清楚的知道这个区别。

上面的计算结果为:

===============aT
short.html:25 ******||******5
short.html:16 ===============aT
short.html:26 ******||******5
short.html:21 ===============aF
short.html:21 ===============aF
short.html:27 ******||******null
short.html:21 ===============aF
short.html:16 ===============aT
short.html:28 ******||******5
short.html:16 ===============aT
short.html:21 ===============aF
short.html:30 ******&&******null
short.html:16 ===============aT
short.html:16 ===============aT
short.html:31 ******&&******5
short.html:21 ===============aF
short.html:32 ******&&******null
short.html:21 ===============aF
short.html:33 ******&&******null

最后更新于