JavaScript中的逻辑与 (&&) ,逻辑或(||),逻辑非(!)

目录

逻辑与 &&

逻辑或 ||

 逻辑非 !

逻辑非应用之开关思想  

案例:


逻辑与 &&

var re = A && B

A是一个表达式,B也是一个表达式,re等于A表达式或者B表达式,(如果A表达式判定为true)re就是B,否则反之.

如果 re为A表达式,那么B表达式就不运行.

通俗的说就是:

当A为true时,无论B是true或false,都会返回B。

当A为false时,无论B是true或false(B不会运行),都会返回A。

看题:滴滴出行面试题

var a=(b=0)&&(c=30);
console.log(a);
console.log(b);
console.log(c);

 看这题需要掌握一些知识:

 1.0做布尔判定时,会被判断为false

 2.取一个变量的数据时(01.没有声明直接取值会报错 02.取的是最近一次保存的数据)

 3. eg:a = 10; a变量没有声明就赋值,会隐式声明  var a = 10;

    eg:  var a = 10, a = 20; a变量已经声明,再次赋值,就会更新a中保存的数据为20

分析:(b = 0)进行布尔判定时,会取出b = 0,因为b没有声明,但是浏览器会隐式声明var b,b = 0,进行布尔判定时返回false,程序就不执行逻辑与&&另一端 (c=30)这个表达式,所以 a = 0, b = 0 ,因为(c=30)没有执行,所以内存中根本没有这个c变量,取值c也就取不到,报错。

注意点:这里为什么a的值不是false,而是0 .因为 b=0判定为false,所以返回的是 b= 0这个表达式的值,即0

逻辑或 ||

 var re = A || B

A表达式的布尔判定为true, re = A,此时B表达式不会运行,反之 re = B

通俗的说:

当A为true时,无论B是true或false(B不会运行),都会返回A。

当A为false时,无论B是true或false,都会返回B。

var re = (a=100)||(b=0);
console.log(re);  //100

分析:a = 100,先隐式声明 var a = 100, 布尔判定为真,就不再运行(b=0),所以返回的是(a=100)的值,所以re = 100 

||在开发中,往往是优化的代码最常用的js符号(每个阶段都有优化)

后续学习再回来补充。

 逻辑非 !

逻辑非!的运算过程:

先把变量的值取出来,然后转化为布尔值,再取反,再把取反的结果赋值给变量

注意:转化为布尔值可能为ture,也可能为false,看变量中存的值。

扩展:

 其它类型转换为布尔类型:(重要)

只有 0 ,NaN , null, undefined ,空字符串' ',false转为布尔类型时为false,其余情况转换为布尔类型都是true。且没有特殊情况

console.log(Boolean(0));         //false
console.log(Boolean(NaN));       //false
console.log(Boolean(null));      //false
console.log(Boolean(undefined)); //false
console.log(Boolean(""));        //false
console.log(Boolean(false));     //false

eg:

var a = "isLogin";  //登录过

a= !a;   // !a  把a的值取出来,然后转化为布尔值true,再取反,再把取反的结果赋值给变量a

console.log(a); //false

注意:a的值不同时,取出来转化的结果可能为true可能为false。 

//取出来转化为布尔值true的 ,再取反变为false
// 1.一个非空(null)对象
var a = {n:1};
a = !a;
console.log(a);
// 2.一个非空字符串
var b = "aaaa";
b = !b;
console.log(b);
// 3.任意(非0)数值(包括Infinity)
var c = 1;
c = !c;
console.log(c);
//重点记忆
//取出来转化为布尔值false的 ,再取反变为ture
// 1.一个空字符串
var a = "";
a = !a;
console.log(a);
// 2.数值0
var b = 0;
b = !b;
console.log(b);
// 3.空对象 null
var c = null;
c = !c;
console.log(c);
//4.NaN
var d = NaN;
d = !d;
console.log(d);
//5.undefined
var e = undefined;
e = !e;
console.log(e);

逻辑非应用之开关思想  

开关思想:在一个变量中保存一个布尔值,然后在业务执行时,修改这个变量的值为:取反,让通过变量的值执行分支业务。

var flag = true;
function fn(){     //函数每运行一次,flag的值都改变了(取反)
    flag = !flag;  //这样操作,调用一次函数运行if里面,再调一次运行else里面,就做成了分支
    if(flag){
        
    }else{
        
    }
}
fn();
fn();

开关思想用处: 如果用户怎么了,就怎么,如果用户没怎么,就怎么

eg:如果用户冲了VIP就可以发弹幕,如果没冲VIP,就不能发弹幕。

后面学习回来再补充。(这里不用深究)

案例:

注意点:三个逻辑运算符(&&、||、!)    优先级是:!> &&  > ||  。

//注意一点:优先级顺序
console.log(0 && 2 || 1);           // 1
console.log(0 || 2 && 1);           //1 
console.log(0 && 2 && 3 || 1 || 4); //1 
console.log(0 || 2 || 3 && 1);      //2 
console.log(0 || 2 || 3 && 1 && 4); //2  易错原因,没有注意优先级得到结果4
console.log(0 || 1 || 2);           //1 
console.log(0 || 1 || 2 || 3);      //1
console.log(0 && 2 && 1);           //0
console.log(0 && 2 && 1 && 3);      //0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值