Javascript ||,如何比较多个变量值?

时间:2010-05-24 21:07:56

标签: javascript operators comparator

如何正确理解这种语法:

if (tipoTropaPrioritaria[m] || troopsCount[m] || availableTroops[m]) == ("null" || "undefined") {

...

}

(检查前3个变量中的任何一个是否为null或未定义)

7 个答案:

答案 0 :(得分:3)

您可以定义一个小辅助函数来执行检查,然后在所有值上使用它:

function notset(v) {
   return (v === undefined) || (v === null);
}

if (notset(tipoTropaPrioritaria[m]) || notset(troopsCount[m]) ||
    notset(availableTroops[m])) {
  ...
}

答案 1 :(得分:2)

使用:

if (tipoTropaPrioritaria[m] == null || troopsCount[m] == null || availableTroops[m] == null || 
    tipoTropaPrioritaria[m] == undefined || troopsCount[m] == undefined || availableTroops[m] == undefined) {
    // ...
}

编辑:在这种情况下,最好使用===(三等)运算符。

if (tipoTropaPrioritaria[m] === null || troopsCount[m] === null || availableTroops[m] === null || 
    tipoTropaPrioritaria[m] === undefined || troopsCount[m] === undefined || availableTroops[m] === undefined) {
    // ...
}

或:

if (null in {tipoTropaPrioritaria[m]:0, troopsCount[m]:0, availableTroops[m]:0} || undefined in {tipoTropaPrioritaria[m]:0, troopsCount[m]:0, availableTroops[m]:0}) {

答案 2 :(得分:1)

这是做你想做的最好的方式

if (!tipoTropaPrioritaria[m] || !troopsCount[m] || !availableTroops[m]) {
    ...
}

!运算符将结果强制转换为可以测试的布尔值(null和undefined变为false),并且前面的! false被否定为{{1 }}

另一种方法是针对truenull测试每个表达式。

undefined

所以你知道,测试undefined的正确方法是

function isNullOrUndefined(val) {
    return (val === null || typeof val == "undefined"); 
}    

if (isNullOrUndefined(a) || isNullOrUndefined(b) ... ) {

答案 3 :(得分:1)

要做的是:

if ((tipoTropaPrioritaria[m] == null || tipoTropaPrioritaria[m] == undefined)
|| (troopsCount[m] == null || troopsCount[m] == undefined) ||
(availableTroops[m] == null || availableTroops[m] == undefined)) {
...
}

答案 4 :(得分:1)

如果你这么做很多,你可以创建一个辅助函数

function isNullOrUndef(args) {
    for (var i =0; i < arguments.length; i++) {
        if (arguments[i] == null || typeof arguments[i] === "undefined") {
            return true
        }
    }
    return false
}

if (isNullOrUndef(tipoTropaPrioritaria[m], troopsCount[m], availableTroops[m]))
  ...

答案 5 :(得分:0)

if (tipoTropaPrioritaria[m] && troopsCount[m] && availableTroops[m]) { }
else { /* At least ones is undefined/null OR FALSE */ }

if (tipoTropaPrioritaria[m] == null || troopsCount[m] == null || availableTroops[m] == null)
{ /* One is null. */ }

答案 6 :(得分:0)

如果你想检查它们是否为空或未定义,你可以写

if (!tipoTropaPrioritaria[m] || !troopsCount[m] || !availableTroops[m])

null undefined都是 falsely 值。如果这些都不是 null undefined ,那么这只会是真的。 请考虑还有其他错误的值:

  • 0
  • 空字符串
  • 的NaN