【问题标题】: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,因此在检查最后一个条件后(并且两者都不等于 false)b 被分配给 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”是非零的。而使用 && 运算符时,必须对两个表达式进行求值才能确定语句的真实性。