alert(1&&2)==2 alert(1||2)==1
我们对逻辑与(&&)和逻辑或(||)的认识是
对于 && 是全真为真
对于 || 是一真为真
看到上面的 1&&2 ==2就蒙了
应该这样计算
先来说说 ||(逻辑或), 从字面上来说,只有前后都是 false 的时候才返回 false,否则返回 true。
alert(0||1);//显然,我们知道,前面 0 意味着 false,而后面 1 意味着 true,那么上面的结果应该是 true,而事实返回的结果是 1。 alert(2||1);//前面 2 是 true,后面 1 也是 true,那返回结果又是什么呢?测试结果是 2,继续看: alert('a'||1);//同样,前面 'a' 是 true,后面 1 也是 true;测试结果是 'a',下面 alert(''||1);//由上,我们知道前面 '' 是 false,后面 1 是 true,而返回结果是 1。再看下面 alert('a'||0);//前面 'a' 是 true,而后面 0 是 false,返回结果是 'a',继续下面 alert('a'||'b');//前面 'a' 是 true,后面 'b'是 false,返回结果是 'a',我们继续下面 alert(''||0);//前面 '' 是 false,后面 0 同样是 false,返回结果是0 alert(0||'');//前面0是false,后面''是false,返回结果是''
结论:
1、只要 || 前面为 false,不管 || 后面是 true 还是 false,都返回 || 后面的值。
2、只要 || 前面为 true,不管 || 后面是 true 还是 false,都返回 || 前面的值。
下面说说 &&(逻辑与), 从字面上来说,只有前后都是 true 的时候才返回 true,否则返回 false。
alert(''&&1);//结是返回 '', && 前面 '' 是 false,后面是 1是 true。 alert(''&&0);//结是返回 '', && 前面 '' 是 false,后面是 0 也是 false。 alert('a'&&1);//结是返回 1, && 前面 'a' 是 true,后面是 1 也是 true。 alert('a'&&0);//结是返回 0, && 前面 'a' 是 true,后面是 0 是 false。 alert('a'&&'');//结是返回 '', && 前面 'a' 是 true,后面是 '' 是 false。 alert(0&&'a');//结是返回 0, && 前面 0 是 false,后面是 'a' 是true。 alert(0&&'');//结是返回 0, && 前面 0 是 false,后面是 '' 也是false。
结论:
1、只要 && 前面是 false,无论 && 后面是 true 还是 false,结果都将返 && 前面的值;
2、只要 && 前面是 true,无论 && 后面是 true 还是 false,结果都将返 && 后面的值;