繁体   English   中英

检查两个对象在javascript中是否都未定义或为null

[英]check if two objects are both undefined or null in javascript

我有一个方法hitTest来检查碰撞检测,并可以返回Point对象(如果发生碰撞)或(如果没有碰撞)它返回nullundefined (我不太了解何时返回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不通过,如果任一result1result2null

对于这类事情,underscore.js很漂亮: http//underscorejs.org/#isNullhttp://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM