2013-02-19 83 views
0

我有一个检测碰撞检测的方法hitTest,并且可以返回一个Point对象(如果发生碰撞)或(如果没有碰撞),它返回nullundefined (我还没有深刻理解它何时返回null或未定义,但我相信Chrome控制台)。检查两个对象是否都是未定义的或在javascript中为空

我必须测试2个对象的碰撞。并检查一个或两个碰撞是否发生。我曾尝试这样的代码:

var result1 = hitTest(player, object1); 
var result2 = hitTest(player, object2); 
if(result1 || result2) { blabla() }; 

,但它不工作。

现在..我知道,js是一个棘手的语言,我想一个聪明的方式来做到这一点,而不写typeof 4次。我在想蟒蛇短路逻辑运算符...

+0

'||'返回第一个找到的'true',如果找不到'true',则返回'false'。 '&&'返回第一个找到的'false',如果不是'false'则返回'true'。 – Teemu 2013-02-19 19:17:12

+0

谢谢。添加它作为答案,我可以使用它作为正确的答案 – nkint 2013-02-19 19:22:06

+0

如果有(0,至少1,2)碰撞你想要你的if语句为真吗? – 2013-02-19 19:32:13

回答

2

您可以使用&&,它返回第一个检测false/null/undefined/0,即if不会通过,如果任一result1result2null

+1

更好的方式来说这是: 对于'&&'要通过,BOTH必须是'true'。对于'||'来说,只有一个必须是'true'。 – krillgar 2013-02-19 19:28:44

+0

@krillgar是的,如果我们在谈论“if”。我正在谈论'&&'操作符,它真的返回其任一操作数。虽然固定的答案,因为“如果”本身并没有失败...... – Teemu 2013-02-19 20:12:41

1

您不需要的那些无论如何已经4次写typeof;

强制范式条件语句和运营商:

//TYPE   //RESULT 
Undefined  // false 
Null    // false 
Boolean   // The result equals the input argument (no conversion). 
Number   // The result is false if the argument is +0, −0, or NaN; otherwise the result is true. 
String   // The result is false if the argument is the empty String (its length is zero); otherwise the result is true. 
Object   // true 

从Mozilla的:

逻辑与(&&

表达式1 & &表达式2
如果第一个操作数(expr1)可以转换为false,则&&操作员将返回false而不是expr1的值。

逻辑OR(||

expr1的|| expr2 返回expr1如果它可以转换为true;否则,返回expr2。因此,如果使用布尔值,则||返回true,如果任一操作数是true;如果两者都是false,则返回false

true || false // returns true 
true || true // returns true 
false || true // returns true 
false || false // returns false 
"Cat" || "Dog"  // returns Cat 
false || "Cat"  // returns Cat 
"Cat" || false  // returns Cat 

true && false // returns false 
true && true // returns true 
false && true // returns false 
false && false // returns false 
"Cat" && "Dog" // returns Dog 
false && "Cat" // returns false 
"Cat" && false // returns false 

此外,您可以使用快捷isset()方法就像在PHP正确验证您的对象:

function isSet(value) { 
    return typeof(value) !== 'undefined' && value != null; 
} 

左右;您的代码是:

var result1 = hitTest(player, object1), 
    result2 = hitTest(player, object2); 
if (isSet(result1) && isSet(result2)) { blabla(); }; 
相关问题