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 a
、b
或 c
中第一个不是 "falsy" 的子表达式。那是 a
,因为它的值为 "one"
,所以这是与 "three"
.
相比的总值
此计算结果为 "three" 的等效字符串 a、b 或 c(为 true 或 false)。这永远是错误的。
为了达到你想要的,你需要
return (a === 'three') || (b === 'three') || (c === 'three');
表达式( a || b || c )
returns任何真实的东西,先到先得。
这里 a
是真实的,因此被使用。如果 a
是 falsey 将使用 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";
});
为什么会失败?
我阅读这段代码的方式是"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 a
、b
或 c
中第一个不是 "falsy" 的子表达式。那是 a
,因为它的值为 "one"
,所以这是与 "three"
.
此计算结果为 "three" 的等效字符串 a、b 或 c(为 true 或 false)。这永远是错误的。 为了达到你想要的,你需要
return (a === 'three') || (b === 'three') || (c === 'three');
表达式( a || b || c )
returns任何真实的东西,先到先得。
这里 a
是真实的,因此被使用。如果 a
是 falsey 将使用 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";
});