Javascript 逻辑运算符(和运算符)

Javascript 逻辑运算符(和运算符),javascript,logical-operators,Javascript,Logical Operators,我遇到了以下逻辑运算符解决方法,但无法理解其背后的逻辑: console.log(1和&2)将为您提供2 console.log(false&&X)将获取您的false console.log(true&&X)将使您UncaughtReferenceError:X未定义 任何人都能解释答案吗? < P>。请考虑下面的语句: A& & B。&操作符在这里所做的是仅当其值为false时才返回A,否则返回B。这就是AND操作符在JavaScript和大多数其他语言中的工作方式 这就解释了前两行代码。在

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

console.log(1和&2)
将为您提供
2

console.log(false&&X)
将获取您的
false

console.log(true&&X)
将使您
UncaughtReferenceError:X未定义


任何人都能解释答案吗?

< P>。请考虑下面的语句:<代码> A& & B</代码>。
&
操作符在这里所做的是仅当其值为
false
时才返回
A
,否则返回
B
。这就是AND操作符在JavaScript和大多数其他语言中的工作方式


这就解释了前两行代码。在第三行中,语句应该返回
B
变量,该变量在这里是
X
。但是,
X
似乎是一个未声明的变量,因此控制台会引发错误 A & & B < /代码>。
&
操作符在这里所做的是仅当其值为
false
时才返回
A
,否则返回
B
。这就是AND操作符在JavaScript和大多数其他语言中的工作方式

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

查看
&&
运算符的:

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

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

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

查看
&&
运算符的:

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

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


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

在JavaScript中,有truthy和falsy值。虚假的价值观是

  • false
  • 0
    (数字零)
  • (空字符串)
  • 未定义
    null
所有其他价值观都是真实的

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

  • 计算第一个操作数。如果结果是错误值,则返回该值
  • 否则,计算第二个操作数并返回其值
  • 让我们看一下您的示例:

    • 1和&2
      中的
      1
      是真实的,因此计算
      2
      并将其作为表达式的值返回

    • false&&X
      中的
      false
      是falsy,因此它作为表达式的值返回。将不计算第二个操作数(
      X

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

    如果希望具有回退值,此行为非常有用:

    函数日志名(选项){
    const name=options.name | |“默认名称”;
    console.log(名称);
    }
    日志名({name:'foo'});//日志“foo”
    日志名({name:'});//日志“默认名称”
    
    日志名({});//记录“默认名称”
    在JavaScript中,有truthy和falsy值。虚假的价值观是

    • false
    • 0
      (数字零)
    • (空字符串)
    • 未定义
      null
    所有其他价值观都是真实的

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

  • 计算第一个操作数。如果结果是错误值,则返回该值
  • 否则,计算第二个操作数并返回其值
  • 让我们看一下您的示例:

    • 1和&2
      中的
      1
      是真实的,因此计算
      2
      并将其作为表达式的值返回

    • false&&X
      中的
      false
      是falsy,因此它作为表达式的值返回。将不计算第二个操作数(
      X

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

    这种行为非常有用