&& 、||短路原理的应用 与操作符的优先级

问题带入

问题1:

console.log(true && false)  //?
console.log("1" && 2)    // ?
console.log("" && 2)    //?
console.log(" " && 2)   //?
console.log(0 && "2")    // ?
console.log(a=5 && a+=5)   // ?

&&(逻辑与)和||(逻辑或)这两个操作符应该是很多人都知道且运用于项目当中。最简单的理解莫过于电路当中的串联与并联。
逻辑与(&&): 当两边式子都成立的时候结果返回右边成立的那个。(两者 都为真(true)返回右边真),如果其中一个为false(假),则返回false。

上面打印出来的结果:

console.log(true && false)  //false
console.log("1" && 2)    // 2
console.log("" && 2)    //
console.log(" " && 2)   //2
console.log(0 && "2")    // 0
console.log(a=5 && a+=5)   // Invalid left-hand side in assignment

true&&false这不用说了;字符串”1” 为true 所以第二个打印出2;
第三和第四的字符串中有一个空格的差别,没有空格的是一个空字符串,空字符串经过valueof等过程的解析会为false,所以打印出空,而第四个中间有空格,那个空格也可以算作一个字符所以为true, 返回2;
最后一个报错,这个错误一看就应该明了,赋值错误,为什么会赋值错误呢?仔细想想,原来与操作符的优先级有关,此句等效于 console.log((a=5 && a)+=5); 此时a没有定义也没有初始化,所以会报错。只需加上小括号提高+=的优先级就好了,console.log((a=5) &&(a+=5)) //10

问题2:

console.log(true || false)  //?
console.log("1" || 2)    //?
console.log("" || 2)    //
console.log(" " || 2)   //?
console.log(0 || "2")    // ?
console.log(a=5 || a+=5)   // ?

不用想都知道,是与上面相反。
逻辑或(||): 当两边式子都成立的时候结果返回左边成立的那个。(两者 都为真(true)返回左边真,因为一旦左边为true就不会执行右边的运算,两者都为false时返回右边false),如果其中一个为false(假)一个为true,则返回true。只有两者都为false时才会返回false。

打印结果:

console.log(true || false)  //true
console.log("1" || 2)    // "1"
console.log("" || 2)    // 2
console.log(" " || 2)   // " "
console.log(0 || "2")    // "2"
console.log(a=5 || a+=5)   // 报错,同上

最后一个只需将+=的优先级提高,console.log(a=5 || (a+=5)),而前面的&&需要两边都加小括号console.log((a=5) && (a+=5)):
先转化为:
console.log(a=(5 || (a+=5)));
console.log(a=(5 && (a+=5)));

因为一般程序执行顺序是从左至有, || 如果发现左边为true 则不会再执行右边内容,而&& 如果左边为true还要执行右边内容再返回,而右边a没有初始化所以报错。

常用设置 对象为null或者undefined时候的默认值

console.log(null || 0)       //0
console.log(null || '')       //
console.log(undefined || 1)     //1
console.log(undefined || 0)    //0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值