您的位置:首页 > Web前端 > JavaScript

JavaScript学习(4.7):逻辑表达式

2015-11-25 09:19 537 查看
4.10 逻辑表达式
逻辑运算符 && || !是对操作数进行布尔算术运算,经常和关系运算符一起配合使用。

4.10.1 逻辑与(&&)
&& 运算符可以从三个不同层次进行理解:

当操作数都是布尔值的时候,&&对两个值执行布尔与操作,只有在两个操作数都是true的时候,才返回true。
&& 的操作数并不一定是布尔值,还有真值和假值null.undefined,0,-0,NaN,false,' ',所以,第二层理解是,&&可以对真值和假值进行布尔与操作。如果都是真值,那么返回一个真值,否则,至少一个是假值,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值和假值来对待,&&并不总是返回true和false,但并无大碍。
&&运算符首先计算左操作数的值,如果是假值,那么整个表达式的结果一定是假值,因此&&这时简单的返回左操作数的值,而并不会对右操作数进行计算;如果左操作数是真值,那么整个表达式的结果依赖于右操作数的值;此时,&&运算符将计算右操作数的值并将其返回作为整个表达式的计算结果。

var p ={x:1}
p.y && p.x //左边假值;没有定义,undefined返回
null && p.x //null

3 && null //null
3 && 2 //2

&& 的行为有时称作短路,很多代码利用这一特性来有条件的执行代码:
if(a == b) stop();
-----------等价
(a == b) && stop();

注意一点,当&&右侧表达式具有副作用的时候(赋值、递增、递减和函数调用表达式)要格外小心,因为这些带有副作用的表达式的执行依赖于左操作数的计算结果。
4.10.2 逻辑或||
||运算符对两个操作数做布尔或运算,如果其中一个或者两个操作数是真值,返回一个真值,如果两个操作数都是假值,返回一个假值。
和&& 类似,|| 并不仅仅会做布尔值的运算,它也具有一些更复杂的行为。
如果||的左操作数是真值,则返回这个真值;左操作数是假值,此时依赖右操作数,计算右侧表达式并返回值
3 || 2 //3
null || undefined //undefined
null || 3 //3
右操作数依赖左操作数,所有和&&一样,应该避免右操作数包含一些具有副作用的表达式,除非目的明确的在右侧使用带副作用的表达式。

var max = max_width || preference.max_width || 500;
通常用在函数体中,用来给参数提供默认值:
function copy(o,p){
p = p || {};
}
4.10.3 逻辑非(!)
! 运算符是一元运算符。它防止在一个单独的操作数之前,目的是将操作数的布尔值进行求反。“!”与“&&”和“||”不同,“!”运算符首先将其操作数转换为布尔值,然后再对布尔值求反,也就是说“!”只返回布尔值true或false,通过两次求反得到的是一个等价的布尔值:!!x.
"!"具有很高的优先级,如果希望对q && p求反,则需要使用圆括号:!(p && q)

!(p && q) === !p || !q
!(p || q) === !p && !q
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: