我不明白逻辑运算符是如何工作的。我知道它是如何处理布尔值的,但字符串或数字呢?
2 && 7
returns 7
"dog" && "cat"
returns "cat"
我明白了,若数字或字符串并没有相同的值,那个么就会返回第二个值。但为什么呢?我能在"现实世界"中使用它吗?
如果左手边为true,则计算为右手边。
如果左手边不为真,则计算为左手边。
CCD_ 1被评估为LHS。false
也是如此。
CCD_ 3被评估为LHS。false
也是如此。
true && false
评估为RHS手侧。false
也是如此。
true && true
评估为RHS。true
也是如此。
2 && 7
评估为RHS。false && true
0也是如此(这是真的)。
CCD_ 11被评估为LHS。0
也是如此(这是错误的)。
"cat" && "dog"
评估为RHS手侧。"dog"
也是如此(这是真的)。
||
以相同的方式工作,但如果为false,则返回LHS。
我能在"现实世界"中使用它吗?
使用它的主要方法是计算两个值是否都为true。这是操作员的重点。
(它还可以用作if
测试的简写,并用于确定在某个地方分配两个值中的哪一个)。
&&
运算符不返回布尔值,而是返回其一个操作数。因为操作数被求值为布尔值。由于2
是truthy,而7
是truthy,因此返回7
与返回true
相同,因为结果是1truthy。对于0 && 7
,它返回0
,因为这是false,这是预期的结果。
在布尔上下文中,此行为与返回true
或false
相同,但它允许在其他上下文中使用有用的行为。最常遇到的是:
foo = foo || 'bar';
如果||
(和&&
)将返回一个布尔值,那么您必须编写以下内容:
if (!foo) {
foo = 'bar';
}
或:
foo = foo ? foo : 'bar';
逻辑运算符如何工作在MDN逻辑运算符上有很好的解释
在"现实世界"中我能用它做什么?
您可以使用||运算符对多个键上的数组进行排序。
示例:
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
此外,操作员的"短路评估"也是有益的。