逻辑运算符(AND运算符)

时间:2017-10-01 13:20:49

标签: javascript logical-operators

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

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

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

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

任何人都可以解释答案吗?

3 个答案:

答案 0 :(得分:4)

查看&&运算符的documentation

  

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

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

最后两个例子非常简单,因为涉及到布尔值。如果任一操作数为false,则返回false。只有第三个给出错误的原因是因为在第二个中,第二个操作数(X)从不会因为短路而被检查。短路意味着一旦JS看到第一个值是false,它甚至都不会检查另一个值。 JS将false视为第一个操作数并立即返回。

答案 1 :(得分:1)

请考虑以下声明:A && B&&运算符在此处执行的操作仅返回A ,如果其值为false,则返回B。这就是AND运算符在JavaScript和大多数其他语言中的工作原理。

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

答案 2 :(得分:1)

在JavaScript中,有一些真实和虚假的价值观。虚假值是

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

所有其他值都是真实的。

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

  1. 评估第一个操作数。如果结果是假值,则返回该值。
  2. 否则,请计算第二个操作数并返回其值。
  3. 让我们来看看你的例子:

    • 1中的1 && 2是真实的,因此评估2并将其作为表达式的值返回。

    • false中的false && X是假的,因此它将作为表达式的值返回。第二个操作数(X)将不会被评估。

    • true中的true && X是真实的,因此会评估第二个操作数,这会引发错误,因为没有X

    如果您想要一个回退值,这种行为非常有用:

    &#13;
    &#13;
    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'
    &#13;
    &#13;
    &#13;