资讯专栏INFORMATION COLUMN

js中的|与 && 运算符详解

jsyzchen / 813人阅读

摘要:这个时候我就有点犯迷糊了,为什么逻辑运算符能这么用呢由于是出身,所以对这样用感觉很奇怪。

这篇文章主要介绍了js中的 || 与 && 运算符详解,需要的朋友可以参考下

js中逻辑运算符在开发中可以算是比较常见的运算符了,主要有三种:逻辑与&&、逻辑或||和逻辑非!。

当&&和|| 连接语句时,两边的语句会转化为布尔类型(Boolean),然后再进行运算,具体的运算规则如下:

两边条件都为true时,结果才为true;

如果有一个为false,结果就为false;

当第一个条件为false时,就不再判断后面的条件

注意
当数值参与逻辑与运算时,结果为true,那么会返回的会是第二个为真的值;如果结果为false,返回的会是第一个为假的值。

二.

只要有一个条件为true时,结果就为true;
当两个条件都为false时,结果才为false;
当一个条件为true时,后面的条件不再判断
注意:当数值参与逻辑或运算时,结果为true,会返回第一个为真的值;如果结果为false,会返回第二个为假的值;

三.

当条件为false时,结果为true;反之亦然。
上代码说明:

``
``
``
``
`demo`
``
``
``
``
``

补充:逻辑与的优先级是高于逻辑或的;
比如console.log(3||2&&5||0),会先算2&&5的值为5,然后再3||5----3,最后再3||0----3,所以最终结果为3.

补充

表达式a && 表达式b : 计算表达式a(也可以是函数)的运算结果,

如果为 True, 执行表达式b(或函数),并返回b的结果;

如果为 False,返回a的结果;

表达式a || 表达式b : 计算表达式a(也可以是函数)的运算结果,

如果为 Fasle, 执行表达式b(或函数),并返回b的结果;

如果为 True,返回a的结果;

转换规则:

对象为true;
非零数字为true;
零为false;
非空字符串为true;
空字符串为法false;
其他为false;
例如

var a = obj || " " ; //如果 obj 为空,a就赋值为 " " ;
var a = check() && do(); //如果check()返回为真,就执行do(),并将结果赋值给 a;
其他网友的补充

今天复习js继承的时候发现了一个问题,先上代码了

``
 ```
在执行构造函数的时候,无参的构造函数返回的name是"mama",有参数时,实例的name就是参数值了。 >这个时候我就有点犯迷糊了,为什么>逻辑运算符||能这么用呢?
由于是C#出身,所以对js ||这样用感觉很奇怪。
没辙,不懂先研究,实验实验就知道了。
`var` `b, c, d;`
`b =` `true` `|| 0;``//b=true;`
`c =` `false` `|| 0;``//c=0;`
`d = 1 || 0;``//d=1;`

换成别的呢?

`var` `b, c, d;`
`b = 1-1 || 1+1;` `//b=2`
`c =` `function` `() {` `return` `undefined } ||` `function` `() {` `return` `1};``//c=function();`
`d = c();``//d=undefined`
`var` `b, c, d;`
`b = 1-1 || 1+1;` `//b=2`
`c =` `function` `() {` `return` `1 } ||` `function` `() {` `return` `undefined};``//c=function();`
`d = c();``//d=1`
`b = {} || { a: 1, getA:` `function` `() {` `return` `this``.a}};` `//b=object`
image
`var` `b, c, d;`
`b = { a: 1, getA:` `function` `() {` `return` `this``.a } } || {};` `//b=object`
`c = b.getA();``//c=1;`

通过这几个实验,可以看出,JS的||并不是像C#里面的||一样 单纯的返回一个布尔类型。
大家都知道js的布尔类型判定是对象是true,非零是true,非空字符串是true其余的都是false

由此得出
逻辑或

表达式 表达式2 a取值
1 0 表达式1结果值
1 1 表达式1结果值
0 1 表达式2结果值
0 0 表达式2结果值

逻辑与 && :
var a = 表达式1 && 表达式2

表达式1 表达式2 a取值
1 0 表达式2结果值
1 1 表达式2结果值
0 1 表达式1结果值
0 0 表达式1结果值
主要原因是因为短路,逻辑或 在前面有一个ture的时候则不看后面直接停止,逻辑与&&同理。

然后计算赋值和我们平时一样之获取最新的一次计算结果值。

例如

b = (1 + 1, 2 + 2, 3 + 3);`//b=6;`

嘛嘛,当然只是猜测。
以上仅供参考。萌新一只,望各位大佬轻批。了解更多

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27536.html

相关文章

  • js中的 && 算符详解

    摘要:这个时候我就有点犯迷糊了,为什么逻辑运算符能这么用呢由于是出身,所以对这样用感觉很奇怪。 这篇文章主要介绍了js中的 || 与 && 运算符详解,需要的朋友可以参考下 一 js中逻辑运算符在开发中可以算是比较常见的运算符了,主要有三种:逻辑与&&、逻辑或||和逻辑非!。 当&&和|| 连接语句时,两边的语句会转化为布尔类型(Boolean),然后再进行运算,具体的运算规则如下: 两边条...

    baoxl 评论0 收藏0
  • 详解Python中位运算的简单实现

      位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。本文将利用Python语言实现位运算,感兴趣的可以了解一下  简介  程序中的数在计算机内存中都是以二进制的形式存在的,位运算就是直接对整数在内存中对应的二进制位进行操作,一般是将数字化为二进制数后进行操作。  应用场景  在常规操作和位运算的操作中使用位运算,可以提升性能。但是会造成代码难以理解,建议合理...

    89542767 评论0 收藏0
  • nvm安装|更新|切换|nodejs的命令实例详解

      nvm(全名node.js version management),是一个node的版本管理工具,它和npm不同点在于,它是依赖包的管理工具。  它主要是用来解决不同项目所需node.js版本不一致时管理的麻烦,举例,hexo主题,不同的主题需要的nodejs版本不一致,假如没有管理的话,就要安装卸载nodejs安装对应的版本  有了nvm就可以简单操作node版本的切换、安装、查看等.  一...

    3403771864 评论0 收藏0
  • Caffe卷积神经网络视觉层Vision Layers及参数详解

      此篇文章主要是给大家介绍了Caffe神经网络视觉效果层VisionLayers及主要参数详细说明,感兴趣的小伙伴可以参考参考一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪  前言  每一个层都有着的主要参数,如name,type,bottom,top和transform_param请参考我前篇文章:Caffe神经网络数据访问层及主要参数  文中只解读视觉效果层(VisionLayer...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<