JS中的 && 和 ||
在JS中的 逻辑与 和 逻辑或
&& 优先级高于 ||
⑴逻辑与 && 的运算 : 一个为假就为假,全真则为真,遇假则停
例子 : a && b
如果a是false,那么b不管是true 还是false ,都会返回a的结果false , 因此就不用判断b了 ,因为这个时候刚好判断了a ,因此返回a。
如果a 是true , 那么就要继续判断 b , 不管b 是true还是false , 都会返回b 。
⑵逻辑或 || 的运算 : 一个为真就为真,全假则为假,遇真则停
例子 : a || b
如果a是false, 那么就要判断b ,继而返回b的结果。其实就是返回b。
如果a是true , 那么不管b 是true还是false, 都会返回true,返回前面的结果,因此不用判断b了,这个时候刚好判断到a,因此返回a。
做一个复杂一点的例子 : (注意在JS中&&运算符优先级大于|| )
假设 :
var a=new Object(), b=0, c=Number.NaN, d=1, e=”Hello”;
Console.log( a || b && c || d && e );
( a || b && c || d && e ) 表达式从左往右执行,先&&后||
- 先执行 ( b&& c) : b是false , 此时不需要判断c , 因为不管c是true还是false , 都会返回 b , 最终结果一定是false, 因此返回当前判断对象 b , 就是0 ;
- 然后执行 ( d && e ) : d是 true , 这个时候判断e ,此时不管e是true 还是false , 返回结果一定是e , e为true , 因此返回 ”Hello” ;
- 再执行(a || b) : a 是true, 此时不管 b 是true 还是false, 结果都是true , 所以不用判断b ,所以返回当前判断对象 a , 因此返回new Object() ;
- 最后执行 (a || e) : 同上逻辑 , 因此返回 a 。
这个表达式的最终结果为 a ,也就是 new Object () ;
所以 透过现象发现本质,本质是什么呢 ?
&& 和 || 的作用只有一个(定义):进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果之后,就返回哪个变量。
文字描述区别 :
- 运算表达的不同
只要 “ || “ 前面 为false, 不管 “ || “ 后面 是true 还是 false , 都返回 “ || “ 后面的值。只要 “ || “ 前面 为true , 不管 “ || “ 后面 是true 还是false , 都返回 “ || “ 前面的值。
2. 使用方式的不同
只要 “ && ” 前面 是false , 无论 “ && “ 后面 true 还是 false , 结果 都将返 “ && “ 前面的值; 只要 “ && “ 前面是true , 无论 “ && “ 后面是true 还是false , 结果都将返 “ && “ 后面的值;
此文同时参考也借鉴了网上的一些结果。