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

4.10 逻辑表达式
    逻辑运算符 &&  ||  !是对操作数进行布尔算术运算,经常和关系运算符一起配合使用。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值