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