逻辑运算符(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
(数字零),
""
或 ''
(空字符串),
undefined
和 null
.
所有其他值都是真实的。
这就是 &&
运算符的工作方式 in JavaScript:
- 计算第一个操作数。如果结果是假值,return 该值。
- 否则,计算第二个操作数和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'
我遇到了以下逻辑运算符解决方法,但无法理解背后的逻辑:
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
(数字零),""
或''
(空字符串),undefined
和null
.
所有其他值都是真实的。
这就是 &&
运算符的工作方式 in JavaScript:
- 计算第一个操作数。如果结果是假值,return 该值。
- 否则,计算第二个操作数和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'