1 <script> 2 /****45页 3 1 逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值! 4 2 在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值,此时,它遵循下列规则: 5 ***/ 6 7 //如果第一个操作数是对象,则返回第二个操作数,测试两个变量都声明定义的情况下; 8 var ary1=[]; 9 var num1=false; 10 var result1=( ary1&&num1 ); 11 console.log( '如果第一个操作数是对象,则返回第二个操作数: '+result1 ); //输出10; 12 13 //如果第一个操作数是对象,则返回第二个操作数,测试一个变量只声明; 14 var ary2=[]; 15 var num2; 16 var result2=( ary2&&num2 ); 17 console.log( '如果第一个操作数是对象,则返回第二个操作数: '+ result2 ); //输出undefined; 18 19 //如果两个操作数是对象,则返回第二个操作数; 20 var aryA=['数组1']; 21 var aryB=['数组2']; 22 var result3=( aryA&&aryB ); 23 console.log('如果两个操作数是对象,则返回第二个操作数: '+ result3 ); //输出数组2; 24 25 //如果有一个操作数是null,则返回null; 26 var aryC=null; 27 var num3=10; 28 var result4=( num3&&aryC ); 29 console.log('如果有一个操作数是null,则返回null: '+result4); //输出null 30 31 //如果有一个操作数是NaN,则返回NaN 32 var num4=10; 33 var num5=10-'a'; 34 var result5=num4&&num5; 35 console.log( '如果有一个操作数是NaN,则返回NaN: '+result5 ); //输出NaN 36 37 //如果有一个操作数是undefined,则返回undefined 38 var num6=10; 39 var num7; 40 var result6=num6&&num7; 41 console.log( '如果有一个操作数是undefined,则返回undefined: '+result6 ); //输出undefined 42 43 //两个数据的值分别是0和1的输出结果 44 var num8=0; 45 var num9=1; 46 var result7=num8&&num9; 47 console.log( '两个变量的值分别是1和0的结果: '+result7 ); //输出0 48 49 //两个数据的值分别是数字类型,且是大于1的正数 50 var numA=10; 51 var numB=12; 52 var result8=num8&&num9; 53 console.log( '两个数据的值分别是数字类型,且是大于1的正数: '+result8 ); //输出0 54 55 //两个数据的值分别是数字类型,赋值都是1 56 var numC=1; 57 var numD=1; 58 var result9=numC&&numD; 59 console.log( '两个数据的值分别是数字类型,且是大于1的正数: '+result9 ); //输出1 60 61 //不能在逻辑与操作符中使用没有预解释的变量! 62 /** 63 为什么报错(理解逻辑与):在下面的代码中,当执行逻辑与操作时会发生错误,因为变量someUndefinedVariable没有声明,由于变量found的值是true,所以逻辑与操作符会继续对变量someUndefinedVariable求值.但someUndefinedVariable尚未定义,因此就导致错误,这说明不能在逻辑与操作中使用未定义的值. 64 **/ 65 var found=true; 66 // var result_10=( found&&someUndefinedVariable ); 67 //console.log(result_10); // someUndefinedVariable is not defined,报错 68 console.log('报错行,已经注释了:不能在逻辑与操作符中使用没有预解释的变量') 69 70 //理解逻辑与的短路操作 71 /** 72 在这个例子中,会输出false,无论变量someUndefinedVariable有没有定义,也永远不会对它求值,因为第一个操作数的值是false,而这也就意味着逻辑与操作的结果必定是false, 73 根本就用不着再对&&右侧的操作数求值了.在使用逻辑与操作符时要始终铭记它是一个短路操作. 74 **/ 75 var lost=false; 76 var result_11=( lost&&someUndefinedVariable ); 77 console.log('在使用逻辑与操作符时要始终铭记它是一个短路操作: '+result_11); //false 78 79 //如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象 80 var str1='aaa'; //如果是一个空的字符串,输出是空,没有内容输出 81 var ary3=['这个一个数组']; 82 var result_12=(str1&&ary3); 83 console.log('如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象: '+result_12) ;;//输出:这是一个数组 84 85 /*********** 86 var result=true&&false; 87 逻辑与的真值表: 88 第一个操作数true, 第二个操作数true, 结果是true; 89 第一个操作数true, 第二个操作数false, 结果是false; 90 第一个操作数false, 第二个操作数true, 结果是false; 91 第一个操作数false, 第二个操作数false, 结果是false; 92 v ***********************/ 93 </script>
posted on
浙公网安备 33010602011771号