[英]check if two objects are both undefined or null in javascript
我有一个方法hitTest来检查碰撞检测,并可以返回Point对象(如果发生碰撞)或(如果没有碰撞)它返回null
或undefined
(我不太了解何时返回null或未定义,但是我相信Chrome控制台)。
我必须测试2个对象的碰撞。 并检查是否发生了一次或两次碰撞。 我已经试过这段代码:
var result1 = hitTest(player, object1);
var result2 = hitTest(player, object2);
if( result1 || result2 ) { blabla() };
但这不起作用。
现在..我知道js确实是一种棘手的语言,并且我考虑了一种无需编写4次typeof
就能做到这一点的聪明方法。 我正在考虑python短路逻辑运算符...
您可以使用&&
,它返回第一个检测到的false/null/undefined/0
,即if
不通过,如果任一result1
或result2
为null
。
对于这类事情,underscore.js很漂亮: http : //underscorejs.org/#isNull和http://underscorejs.org/#isUndefined
我经常使用这些助手来解决JS中的极端情况,例如您提到的那些情况。
您不必已经写了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:
逻辑AND( &&
)
expr1 && expr2
如果第一个操作数(expr1
)可以转换为false
,则&&
运算符将返回false
而不是expr1
。
逻辑或( ||
)
expr1 || expr2 如果可以将其转换为
true
,则返回expr1
否则返回true
。 否则,返回expr2
。 因此,当与布尔值一起使用时,||
如果任一操作数为true
,则返回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
此外,可以像在PHP中一样使用快捷方式isset()
方法来正确验证对象:
function isSet(value) {
return typeof(value) !== 'undefined' && value != null;
}
所以; 您的代码将是:
var result1 = hitTest(player, object1),
result2 = hitTest(player, object2);
if ( isSet(result1) && isSet(result2) ) { blabla(); };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.