逻辑运算符(AND 运算符)

Logical Operators (AND Operators)

我遇到了以下逻辑运算符解决方法,但无法理解背后的逻辑:

console.log(1 && 2) 会给你 2

console.log(false && X) 会给你 false

console.log(true && X) 会给你 UncaughtReferenceError:X is not defined

谁能解释一下答案?

因此请考虑以下语句:A && B&& 运算符在这里做的是 return A 只有 如果它的值是 false 否则它 returns B。这就是 AND 运算符在 JavaScript 和大多数其他语言中的工作方式。

所以这解释了前两行代码。在第三行,语句应该return B 变量,这里是X。但是 X 似乎是一个未声明的变量,因此控制台会引发错误。

查看 && 运算符的 documentation

&&; Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.

在第一个示例中,您提供数字 1 和 2 作为操作数。 1 无法转换为 false,因此返回第二个操作数,恰好是 2。

最后两个示例相当简单,因为涉及布尔值。如果任一操作数为假,则返回 false。只有第三个给你一个错误的原因是因为在第二个中,第二个操作数 (X) 由于短路而从未被检查过。短路意味着一旦JS看到第一个值是false,它甚至懒得检查另一个值。 JS 将 false 视为第一个操作数并立即 returns.

在JavaScript中,有真值和假值。虚假值是

  • false
  • 0(数字零),
  • ""''(空字符串),
  • undefinednull.

所有其他值都是真实的。

这就是 && 运算符的工作方式 in JavaScript:

  1. 计算第一个操作数。如果结果是假值,return 该值。
  2. 否则,计算第二个操作数和return它的值。

让我们看看你的例子:

  • 1 && 2中的1是真值,所以2被求值并returned作为表达式的值。

  • false && X中的false是falsy,所以被return编辑为表达式的值。第二个操作数 (X) 将不会被计算。

  • true && X中的true为真,所以求第二个操作数,会报错,因为没有X.

如果你想有一个回退值,这个行为是非常有用的:

function logName (options) {
  const name = options.name || 'Default name';
  console.log(name);
}

logName({ name: 'foo' }); // logs 'foo'
logName({ name: '' });    // logs 'Default name'
logName({});              // logs 'Default name'