一、先来说说 ||(逻辑或), 从字面上来说 只有前后都是 false 的时候才返回 false 否则返回 true。
alert(true||false); // truealert(false||true); // truealert(true||true); // truealert(false||false); // false
但是 从深层意义上来说的话 却有另一番天地 试下面代码
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(true&&false); // falsealert(true&&true); // truealert(false&&false); // falsealert(false&&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 结果都将返 && 后面的值;
让总结一下:
- 1、只要 || 前面为 false 无论 || 后面是true还是 false 结果都返回 || 后面的值。
- 2、只要 || 前面为 true 无论 || 后面是true还是 false 结果都返回 || 前面的值。
- 3、只要 && 前面是 false 无论 && 后面是true还是 false 结果都将返 && 前面的值;
- 4、只要 && 前面是 true 无论 && 后面是true还是false 结果都将返 && 后面的值;
由上两个测试可知 逻辑运算符 || 和 && 都是遵行短路原则 只要确定符号前面的真假 既可确定返回值。
需要说明的是 && 的优先级是高于 || 的 下面测试:
alert(1||'a'&&2);
返回结果是1。
根据反证原理 假设 || 的优先级不低于 && (这里只所以用"不低于" 是为了同时证明等级相同的情况)。
根据上面得出的结论(1) (1||'a')将返回前面的值1 (1&&2)根据结论(4)应该返回后面的值2。这显然不对 由此可知 && 的优先级是高于 || 的。
来源地址:http://www.cnblogs.com/pigtail/archive/2012/03/09/2387486.html
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题