【问题标题】:Logical Operators (AND Operators)逻辑运算符(AND 运算符)
【发布时间】:2017-10-01 13:20:49
【问题描述】:

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

console.log(1 && 2) 会得到你2

console.log(false && X) 会得到你false

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

谁能解释一下答案?

【问题讨论】:

    标签: javascript logical-operators


    【解决方案1】:

    查看documentation 中的&& 运算符:

    &&;如果可以转换为 false,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,如果两个操作数都为真,则 && 返回真;否则,返回 false。

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

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

    【讨论】:

      【解决方案2】:

      因此请考虑以下语句:A && B&& 运算符在这里所做的是返回 A 如果它的值是 false 否则它返回 B。这就是 AND 运算符在 JavaScript 和大多数其他语言中的工作原理。

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

      【讨论】:

        【解决方案3】:

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

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

        所有其他值都是真实的。

        这就是&& 运算符的工作原理在 JavaScript 中

        1. 计算第一个操作数。如果结果是假值,则返回该值。
        2. 否则,计算第二个操作数并返回其值。

        让我们看看你的例子:

        • 1 && 2 中的1 是真的,所以2 被计算并作为表达式的值返回。

        • false && X 中的false 是假的,所以它作为表达式的值返回。不会计算第二个操作数 (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'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-14
          • 2016-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          相关资源
          最近更新 更多