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

Logical operators and their behavior in JavaScript

为什么会失败?

我阅读这段代码的方式是"if either a or b or c equals three, then the statement is true"。但显然 JavaScript 不同意。为什么?

function test() {

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

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

}

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

您对代码的解读不正确。翻译成不同的形式:

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

子表达式 (a || b || c) returns abc 中第一个不是 "falsy" 的子表达式。那是 a,因为它的值为 "one",所以这是与 "three".

相比的总值

此计算结果为 "three" 的等效字符串 a、b 或 c(为 true 或 false)。这永远是错误的。 为了达到你想要的,你需要

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

表达式( a || b || c ) returns任何真实的东西,先到先得。 这里 a 是真实的,因此被使用。如果 afalsey 将使用 b。如果也是falsey,则使用c

因此,您总是会比较 "one" == "three",因为字符串被认为是 真实的。在这种情况下,您可以使用 Array.some,用您的话来说,它可以做您想要的或您希望它的行为方式

"if either a or b or c equals three, then the statement is true"

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