js逻辑运算符&&、||和!

前景:哎,这两天接着一个前端大牛的代码写东西,看见是下面这种写法:

!!v.y && (newTime = v.y);

em 不是特别明白,因为平时用这些都是在 if 等里面运用的,查了一下理解了就写下来,方便大家理解,先来一波我们常用的写法

运用 !或者 !!的场景

var a = 1;  

! a == 1; //false ,取反

!! a == 1 //true  双重否定是肯定,所以在 “! a == 1 ”的基础上在取反  就为 “true”

详解:

1、||(逻辑或):(看例子方便理解)

example1.逻辑运算符通常用于执行布尔代数  -- (这个就不用多说了 大家经常用到)

例子: 只要有一个为true,就返回

if( obj == null || obj == ""){

   //上面的条件有一个满足,就可执行操作

}

example2.利用短路特性 

例子:

当左边的表达式可以转换为true时,将返回左边表达式的值,并且不会去执行右边的表达式。

var a="zx";
a == "zx" || (a="xx");
//输出 true   a的值:"zx"
//解析:a=="zx" 为 true 所以直接返回true,并且不会执行右边的表达式,所以a的值还是:zx

例子:

当左边的表达式可以转换为false时,才会去执行右边的表达式 ,并且返回右边表达式的值

var a ="zx";
a !="zx" || (a="xx");
//输出:"xx"  a的值:xx
//解析:a != "zx" 为 false,所以会执行右边表达式:a="xx",并且返回值:xx,所以这里a的值为:xx

 

2.&&(逻辑与):

example1.逻辑运算符通常用于执行布尔代数  -- (这个就不用多说了 大家经常用到)

例子:只有前后都是true的时候才返回true,否则返回false

if( obj != null && obj != ""){

     //上面的条件必须都满足,就可执行操作  -- 只有前后都是true的时候才返回true,否则返回false。

}

example2.利用短路特性 

例子:

当左边的表达式能转换成false(例如:null,0或者undefined),那么将返回左边表达式的值,并且不会去执行右边的表达式

var a = 1;
a !=1 && 5;
// 输出 false  
//解析:a != 1 为false, 所以直接返回左边表达式的值:false,并且不会执行右边的表达式

当左边的表达式可以转换为true时,才会执行右边的表达式,并且返回右边表达式的值。

var a =1;  
a == 1 && (a = 3);

//输出 a -- 3  执行了a=3的代码,并且返回了3
//解析: && 前面为true时,才会执行 && 后面的代码;a==1 为 true,就执行了(a =3)的代码,并且返回值
//注意:&& 后面的代码如果是表达式记得要用括号括起来 不要忘记() 奥

我在给大家看一个例子:

var a = "zx";
var y = (a == "zx" && (a="xx"));
//输出 y的值为:xx
//解析:&& 左边 为true,所以就执行了 右边的表达式,并且返回右边表达式的值"xx",所以y的值就为xx;

逻辑运算符优先级
!> && >||

补充:来一个大混杂的

var a = 5;
var b = (a > 6 && 0 || 1);
//输出:  b的值:1
//分析:&& 优先级 高于 || 所以我们先看 &&
a > 6 && 0  => a > 6 为:false,所以不会执行后面的表达式,直接返回false;
false || 1  => 前面为false的话,直接返回后面表达式的值 ,所以返回 1;
所以 大家明白了吗????

总结:

&& 前面为:true  后面不会执行,返回前面的值
   前面为:false 会执行后面表达式,并且返回后面表达式的值

|| 前面为:true 后面不会执行,返回前面的值
   前面为:false 会执行后面表达式,并且返回后面表达式的值

ending   终于写完了。。。。。严重拖延症的我!~~~///(^v^)\\\~~~ 有不正确的欢迎指出奥

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值