[英]Logical operators and their behavior in JavaScript
为什么会失败?
我读这段代码的方式是“如果a或b或c等于3,则该陈述为真”。 但显然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)
返回a
, b
或c
中的第a
,而不是“ falsy”。 那是a
,因为它的值是"one"
,所以这是与"three"
相比较的整体价值。
表达式( a || b || c )
会以先到先得的原则返回任何真实的信息。 这里a
是真实的,因此被使用。 如果a
为假,则将使用b
。 如果也是假的 ,将使用c
。
因此,由于字符串被认为是true ,所以您最终总是比较"one" == "three"
。 在这种情况下,您可以使用Array.some
,用您的语言执行您想要的或您希望的行为
“如果a或b或c等于3,则该陈述为真”
return [a,b,c].some(function(str){
return str == "three";
});
这等于字符串的等价于“三”的a,b或c(对或错)。 这将永远是错误的。 为了实现您想要的,您需要
return (a === 'three') || (b === 'three') || (c === 'three');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.