博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】JavaScript赋值语句中的逻辑与&&和逻辑或||
阅读量:6114 次
发布时间:2019-06-21

本文共 1582 字,大约阅读时间需要 5 分钟。

在其他语言中,我们往往看到逻辑符号出现在判断语句当中,如

if(a||b){}  

但在一些js相关的面试题或者书中,我们有时会看到逻辑与&&和逻辑或||符号出现在赋值语句或者返回语句中,如

var x=a||b;return a&&b||c;

第一次看到时,我们很可能一头雾水,这是怎么回事?

 

因为在js中允许使用表达式赋值,所得的值为该表达式的运算结果。如

var a= 5;  var b= 6;  var c= a+b;  a= 10;  console.log(c);//11  js是按顺序进行,之后的赋值不会影响之前已经计算后的表达式结果
var b= 6; var c= a+b; var a= 5; console.log(c);//NaN //js虽然是按顺序进行,但在js中变量声明会提前处理,赋值操作只有在进行到该赋值语句时才会执行,所以执行到var c= a+b;时,a只定义未赋值。返回 not a num

 

我们知道,

逻辑与&&的运算规则:只有左右都是true时才为true,一边是false时就是false。

逻辑或 | | 的运算规则:只有左右都是false时才为false,一个为true时就是true。

 

那么,在赋值语句和返回语句中逻辑与&&和逻辑或||又是怎样呢?

赋予的和返回的值也不是判断得到的布尔值,而是运算符左右两旁某个表达式的运算结果。

对逻辑与&&来说:

当有一个false时,返回false一侧的值;

当有两个false时,返回运算符之前(左侧)的值;

当有两个true时,返回运算符之后(右侧)的值。

逻辑与&&运算属于短路运算,在按从左向右的运算顺序运算时,如果一个为假,即停止运算,并返回为假的值。如,

var a={};  var b=56;  //window.aaa为一个不存在的对象,  console.log(window.aaa && null);   //undefined  console.log(null && window.aaa);   //null  console.log(a && null);                //null  console.log(window.aaa&& a);      //undefined  console.log(a && b);                   //56  console.log(b && a);                   //object {}

 

对逻辑或 | | 来说,正好同逻辑与&&相反:

当有一个true时,返回true一侧的值;

当有两个true时,返回运算符之前(左侧)的值;

当有两个false时,返回运算符之后(右侧)的值。

逻辑或 | | 运算也属于短路运算,在按从左向右的运算顺序运算时,只有第一个操作数为假,才进行第二个操作数,返回停止运算一侧的值,如

var a={};  var b=56;  console.log(window.aaa || null);   //null console.log(null || window.aaa);   //window.aaa console.log(a || null);                //object {} console.log(window.aaa|| a);      //object {}console.log(a || b);                   //object {}  console.log(b || a);                   //56

 

转载于:https://www.cnblogs.com/lemonade1172/p/7388638.html

你可能感兴趣的文章
快来给宝宝打分
查看>>
vue-lazyload源码分析
查看>>
Hive1.0.0安装
查看>>
你所听到的技术原理、技术本质到底是什么?
查看>>
BGP笔记(一)
查看>>
拷贝构造函数是必须要带引用类型的参数的, 而且这也是编译器强制性要求的...
查看>>
VMware中centos6.5mini设置静态IP
查看>>
Linux文件查找之find详解
查看>>
iptables nat表转发
查看>>
App自动化测试必备之adb使用
查看>>
Apache服务器的基本配置(详细)
查看>>
使用shell批量添加用户
查看>>
记一个OfficeException
查看>>
python 内置模块collections
查看>>
深入JVM锁机制
查看>>
PHP编译安装
查看>>
向ios模拟器里添加图片的简单方法
查看>>
《逆向分析实战》数据的存储及表示形式
查看>>
这本Python入门畅销书《“笨办法”学python 3》,不仅仅是一本书
查看>>
Linux笔记(磁盘格式化mke2fs/mkfs.xfs,磁盘挂载,手动增加swap空间)
查看>>