让前端飞前端攻略

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

2018-11-11  本文已影响4人  880d91446f17

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

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

二.

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

三.

上代码说明:

`<!DOCTYPE html>`
`<html lang=``"en"``>`
`<head>`
`<meta charset=``"UTF-8"``>`
`<title>demo</title>`
`<script>`
`console.log( 5 && 4 );``//当结果为真时,返回第二个为真的值4`
`console.log( 0 && 4 );``//当结果为假时,返回第一个为假的值0`
`console.log( 5 || 4 );``//当结果为真时,返回第一个为真的值5`
`console.log( 0 || 0 );``//当结果为假时,返回第二个为假的值0`
`console.log((3||2)&&(5||0));``//5`
`console.log(!5);``//false`
`</script>`
`</head>`
`<body>`
`</body>`
`</htm>`

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

补充

转换规则:

例如

其他网友的补充

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

`<script type=``"text/javascript"``>`
`window.onload =` `function` `() {`
`var` `mama,`
`mama1,`
`test =` `function` `(name) {`
`debugger;`
`this``.name = name ||` `'mama'``;`
`};`
`debugger;`     
`mama =` `new` `test();`
`mama1 =` `new` `test(``"mama1"``);`
`alert(mama.name);``//name = mama`
`alert(mama1.name);``// name = mama1`
`}`
`</script>`
      }//欢迎加入全栈开发交流圈一起学习交流:582735936
    ]//面向1-3年前端人员
  }   //帮助突破技术瓶颈,提升思维能力

在执行构造函数的时候,无参的构造函数返回的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;`

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

上一篇 下一篇

猜你喜欢

热点阅读