我无法理解逻辑运算符的工作原理。我知道它如何与布尔值一起使用,但字符串或数字呢?
2 && 7
returns 7
"dog" && "cat"
returns "cat"
我知道,如果数字或字符串没有相同的值,则返回第二个值。但为什么?我可以在"现实世界"?
中使用它答案 0 :(得分:5)
如果左侧为真,则评估为右侧。
如果左侧不为真,则评估为左侧。
false && true
评估为LHS。 false
也是如此。
false && false
评估为LHS。 false
也是如此。
true && false
评估为RHS手边。 false
也是如此。
true && true
评估为RHS。 true
也是如此。
2 && 7
评估为RHS。 7
也是如此(这是真的)。
0 && 7
评估为LHS。 0
也是如此(这是假的)。
"cat" && "dog"
评估为RHS手边。 "dog"
也是如此(这是真的)。
||
以相同的方式工作,但如果它是假的则返回LHS。
我可以在“现实世界”中使用它吗?
您可以使用它的主要方法是计算两个值是否为真。这是运营商的意义。
(它还用作速记if
测试,并用于确定在哪里分配两个值中的哪一个。)
答案 1 :(得分:4)
&&
运算符不返回布尔值,它返回其中一个操作数。因为操作数无论如何都被评估为为布尔值。由于2
truthy ,7
truthy ,因此返回7
与返回true
相同,因为结果是 truthy 。对于0 && 7
,它返回0
,因为 falsey ,这是预期的结果。
在布尔上下文中,此行为与返回true
或false
相同,但它允许在其他上下文中使用有用的行为。最常遇到的是:
foo = foo || 'bar';
如果||
(和&&
)会返回一个布尔值,那么您必须改为写这个:
if (!foo) {
foo = 'bar';
}
或:
foo = foo ? foo : 'bar';
答案 2 :(得分:0)
在MDN Logical operators
上很好地解释了逻辑运算符的工作方式我可以在“现实世界”中使用它吗?
您可以使用||用于对多个键上的数组进行排序的运算符。
示例:
const myArray = [{ age: 25, name: 'Patrick' },
{ age: 22, name: 'Greta' },
{ age: 22, name: 'Fien' }];
myArray.sort((a, b) => (a.age - b.age) || a.name.localeCompare(b.name));
console.log('myArray=', JSON.stringify(myArray));
排序方法通常(不在上面的示例中)返回1、0或-1,因此以下内容可能有助于使其更易于理解。
console.log( 1 || 1); // 1
console.log( 1 || 0); // 1
console.log( 1 ||-1); // 1
console.log( 0 || 1); // 1
console.log( 0 || 0); // 0
console.log( 0 ||-1); //-1
console.log(-1 || 1); //-1
console.log(-1 || 0); //-1
console.log(-1 ||-1); //-1
||的“短路评估”运算符是有益的。