我有以下对象:
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
是因为有时候根本没有定义某些属性.
为什么以下IF返回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)
我怎么能问所有方面都是假的?
您必须循环,使用逻辑AND&&
或某些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;} ) ) // ...
实际上测试所有内容true
要容易得多,所以请考虑一下你是否可以if
改为喜欢它,例如使用逻辑NOT!
if (!toppingOrder.q1 && !toppingOrder.q2 && !toppingOrder.q3 && !toppingOrder.q4) // ... // or if ( [!toppingOrder.q1, !toppingOrder.q2, !toppingOrder.q3, !toppingOrder.q4].every(Boolean) ) // ...