Javascript 语法 - if 语句
Javascript Syntax - if statement
我有以下对象:
var quarters = {
q1:false,
q2:false,
q3:false,
q4:{name: "i'm q4"}
}
我的问题是为什么下面的 IF 返回 true?
if (quarters.q1 == quarters.q2 == quarters.q3 == quarters.q4 == false)
我怎么问if all quarters are false
?
我不使用 !quarters.q1 && !quarters.q2 && !quarters.q3 && !quarters.q4
的原因是因为有时,一些属性根本没有定义。
why the following IF is returning true?
假设toppingOrder
是quarters
,让我们填写它看看我们有什么
if (toppingOrder.q1 == toppingOrder.q2 == toppingOrder.q3 == toppingOrder.q4 == false)
// same as
if (false == false == false == {name: "i'm q4"} == false)
// same as
if ((((false == false) == false) == {name: "i'm q4"}) == false)
// same as
if (((true == false) == {name: "i'm q4"}) == false)
// same as
if ((false == {name: "i'm q4"}) == false)
// same as
if (false == false)
// same as
if (true)
How can i ask if all quarters are false?
您要么必须循环,使用 逻辑与 &&
或某些 Array 方法,例如 .every
// logical AND `&&`
if (
false === toppingOrder.q1
&& false === toppingOrder.q2
&& false === toppingOrder.q3
&& false === toppingOrder.q4
) // ...
// Array `.every`
if (
[toppingOrder.q1, toppingOrder.q2, toppingOrder.q3, toppingOrder.q4].every(
function (e) {return e === false;}
)
) // ...
测试 all true
实际上要容易得多,所以考虑一下你是否可以像这样表达你的 if
,例如使用 逻辑非 !
if (!toppingOrder.q1 && !toppingOrder.q2 && !toppingOrder.q3 && !toppingOrder.q4) // ...
// or
if (
[!toppingOrder.q1, !toppingOrder.q2, !toppingOrder.q3, !toppingOrder.q4].every(Boolean)
) // ...
quarters.q1 == quarters.q2 == quarters.q3 == quarters.q4 == false
true == quarters.q3 == quarters.q4 == false
false == quarters.q4 == false
true == false
你实际上在做的是这个
一切都会从左到右执行,除非您设置顺序(使用 ( )
)
你可以这样做
function get_bool(quarters){
for(k in quarters)
{
if(quarters[k] != false)
{
return true;
}
}
return false;
}
我有以下对象:
var quarters = {
q1:false,
q2:false,
q3:false,
q4:{name: "i'm q4"}
}
我的问题是为什么下面的 IF 返回 true?
if (quarters.q1 == quarters.q2 == quarters.q3 == quarters.q4 == false)
我怎么问if all quarters are false
?
我不使用 !quarters.q1 && !quarters.q2 && !quarters.q3 && !quarters.q4
的原因是因为有时,一些属性根本没有定义。
why the following IF is returning true?
假设toppingOrder
是quarters
,让我们填写它看看我们有什么
if (toppingOrder.q1 == toppingOrder.q2 == toppingOrder.q3 == toppingOrder.q4 == false)
// same as
if (false == false == false == {name: "i'm q4"} == false)
// same as
if ((((false == false) == false) == {name: "i'm q4"}) == false)
// same as
if (((true == false) == {name: "i'm q4"}) == false)
// same as
if ((false == {name: "i'm q4"}) == false)
// same as
if (false == false)
// same as
if (true)
How can i ask if all quarters are false?
您要么必须循环,使用 逻辑与 &&
或某些 Array 方法,例如 .every
// logical AND `&&`
if (
false === toppingOrder.q1
&& false === toppingOrder.q2
&& false === toppingOrder.q3
&& false === toppingOrder.q4
) // ...
// Array `.every`
if (
[toppingOrder.q1, toppingOrder.q2, toppingOrder.q3, toppingOrder.q4].every(
function (e) {return e === false;}
)
) // ...
测试 all true
实际上要容易得多,所以考虑一下你是否可以像这样表达你的 if
,例如使用 逻辑非 !
if (!toppingOrder.q1 && !toppingOrder.q2 && !toppingOrder.q3 && !toppingOrder.q4) // ...
// or
if (
[!toppingOrder.q1, !toppingOrder.q2, !toppingOrder.q3, !toppingOrder.q4].every(Boolean)
) // ...
quarters.q1 == quarters.q2 == quarters.q3 == quarters.q4 == false
true == quarters.q3 == quarters.q4 == false
false == quarters.q4 == false
true == false
你实际上在做的是这个
一切都会从左到右执行,除非您设置顺序(使用 ( )
)
你可以这样做
function get_bool(quarters){
for(k in quarters)
{
if(quarters[k] != false)
{
return true;
}
}
return false;
}