看了下某人的博客,说的如下:
||
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
&&
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
后端java中,&&为短路与:一假全假,||为短路或:一真全真
但是我看到的前端代码:
是不是很神奇,符号两边是对象或对象的属性,并不是我们以为的true或false
-------------------------------------------------分割线------------------------------------------------------
以下内容为转载,原文 https://www.cnblogs.com/yanayana/p/7079345.html
与其他语言不同,在js中,逻辑运算符可以返回任何类型的数据,不仅仅是true和false。
&&和||的返回值是两个操作数的其中一个。即a&&b或者a||b返回的是要么是a,要么是b,而其他语言中返回的是true or false。
在js逻辑运算中,需要隐式的转换为boolean类型再来运算,转换规则为:
1. 对象、非零number、非空string——>true
2. 0、""、null、false、undefined、NaN——>false
具体见下表:
数据类型 | 转换为boolean后的值 |
NAN | FALSE |
null | FALSE |
undefined | FALSE |
Object | TRUE |
Function | TRUE |
0 | FALSE |
非零的数字 | TRUE |
""(空字符串) | FALSE |
非空字符串 | TRUE |
二、理解
“&&”和“||”运算符均可以从三个不同的层次来逐步理解:
以“&&”为例解释如下:
(1)最简单的第一层理解是,当操作数都是布尔值的时候,“&&”对两个值执行布尔与(AND)操作,只有在第一个操作数和第二个操作数都是true的时候,它才返回true。如果其中一个操作数是false,它返回false。
(2)“&&”的操作数并不一定是布尔值。于是对“&&”的第二层理解是,“&&”可以对真值和假值进行布尔与(AND)操作。如果两个操作数都是真值,那么返回一个真值;否则,至少一个操作数是假值的话,则返回一个假值。在JavaScript中任何希望使用布尔值的地方,表达式和语句都会将其当做真值或假值来对待,因此实际上“&&”并不总是返回true和false。
(3)第三层理解,运算符首先计算左操作数的值,即首先计算“&&”左侧的表达式。如果计算结果是假值,那么整个表达式的结果一定也是假值,因此“&&”这时简单地返回左操作数的值,而并不会对右操作数进行计算。反过来讲,如果左操作数是真值,那么整个表达式的结果则依赖于右操作数的值。如果右操作数是真值,那么整个表达式的值一定是真值;如果右操作数是假值,那么整个表达式的值一定是假值。
写在最后:java中使用对象或对象的属性去做&&和||判断返回的是true还是false呢?评论区留下你的答案吧