Javascript逻辑运算符和字符串/数字

时间:2016-05-19 08:42:58

标签: javascript logical-operators

我无法理解逻辑运算符的工作原理。我知道它如何与布尔值一起使用,但字符串或数字呢?

2 && 7
returns 7

"dog" && "cat"
returns "cat"

我知道,如果数字或字符串没有相同的值,则返回第二个值。但为什么?我可以在"现实世界"?

中使用它

3 个答案:

答案 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 ,这是预期的结果。

在布尔上下文中,此行为与返回truefalse相同,但它允许在其他上下文中使用有用的行为。最常遇到的是:

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

||的“短路评估”运算符是有益的。