【问题标题】:Why does var c = "a" || "b" return c = "a" and var c = "a" && "b" return c = "b"?为什么 var c = "a" || "b" 返回 c = "a" 和 var c = "a" && "b" 返回 c = "b"?
【发布时间】:2015-12-17 05:15:30
【问题描述】:

我最近收到了这个问题var c = "a" || "b" 那么c 是什么,var c = "a" && "b" 在这种情况下c 是什么?并解释为什么?

我尝试在 jsfiddle 中运行代码,这就是我得到的 var c = "a" || "b" 返回 c = "a" 和 var c = "a" && "b" 返回 c = b。谁能解释一下为什么会这样?

【问题讨论】:

标签: javascript logic operators


【解决方案1】:

对于 OR || 运算符,任何一个条件都必须是 true,因为第一个 "a" 不等于 false,所以第一个值被分配给 c

对于 AND && 运算符,两个条件都需要为 true,因此在检查最后一个条件后(并且两者都不等于 falseb 被分配给 c

类似

var c = "a" && "b" && "d"

将输出"d"

var c = false || "a" || "b"

将输出"a"

【讨论】:

    【解决方案2】:

    运行这个 sn-p,它将证明 && 返回表达式的右侧,而 ||如果已定义,则返回 express 的左侧。如果一个 || 的左边表达式未定义,它使用右侧作为默认值。

    function ampAmp(target, a, b) {
      target.innerText = a && b;
    }
    
    function barBar(target, a) {
      target.innerText = a || "defaultValue";
    }
    
    ampAmp(document.getElementById("ampAmp1"), 1, 2);
    
    ampAmp(document.getElementById("ampAmp2"), 2);
    
    barBar(document.getElementById("barBar1"));
    
    barBar(document.getElementById("barBar2"), 1);
    <p> ampAmp1 returns: 
      <span id="ampAmp1"></span>
    </p>
    
    <p> ampAmp2 returns: 
      <span id="ampAmp2"></span>
    </p>
    
    <p> barBar1 returns: 
      <span id="barBar1"></span>
    </p>
    
    <p> barBar2 returns: 
      <span id="barBar2"></span>
    </p>

    【讨论】:

      【解决方案3】:

      答案是当 ||到达运算符时,脚本看起来没有进一步发现“a”是非零的。而使用 && 运算符时,必须对两个表达式进行求值才能确定语句的真实性。

      【讨论】: