以下代码讲述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>
网友评论