逻辑运算符及其在JavaScript中的行为

时间:2015-03-09 14:35:45

标签: javascript jquery logic operators logical-operators

为什么这会失败?

我读这段代码的方式是“如果a或b或c等于3,那么该陈述为真”。但显然JavaScript不同意。为什么呢?

function test() {

    var a = 'one';
    var b = 'two';
    var c = 'three';

    return ( ( a || b || c ) === 'three' );

}

编辑:我知道我需要分别评估每个表达式,但是正在寻找一种更快的方法来编写它。我们欢迎任何建议。

3 个答案:

答案 0 :(得分:5)

您对代码的阅读不正确。翻译成其他形式:

if (a) {
  return a === "three";
}
if (b) {
  return b === "three";
}
if (c) {
  return c === "three";
}

子表达式(a || b || c)会返回不是“假”的abc中的第一个。这是a,因为其值为"one",因此这是与"three"进行比较的整体价值。

答案 1 :(得分:2)

表达式( a || b || c )以先来先到先得的方式返回任何 truthy 。  这里a是真实的,因此被使用。如果a falsey b将被使用。如果它也是 falsey ,则会使用c

因此,您总是最终比较"one" == "three",因为字符串被视为 truthy 。在这种情况下,你可以使用Array.some,用你的话来做你想要的或你想要它的行为

  

“如果a或b或c等于3,则该陈述为真”

return [a,b,c].some(function(str){
   return str == "three";
});

答案 2 :(得分:1)

这评估为a,b或c(将为真或假)字符串等效于“3”。哪个永远是假的。 为了达到你想要的效果,你需要

return (a === 'three') || (b === 'three') || (c === 'three');