以高效的方式检查多个变量是否不为null、undefined或空

29

目前我有一个if条件,像这样:

if(
  (variable != null && variable != '' && !variable) &&
  (variable2 != null && variable2 != '' && !variable2) &&
  (variable3 != null && variable3 != '' && !variable3)
  //etc..
)

我需要使用它来检查多个变量是否有值(没有被遗漏),但我觉得这是一个凌乱的解决方案,想问一下是否有更高效的方法?也许还需要额外的检查吗?


1
我认为 if(var) 可以完成任务。(这将测试变量是否包含某些内容) - Emanuel Vintilă
可能是重复的问题,参见如何在JavaScript中检查空字符串? - T.Todua
7个回答

64

由于 if(variable) 会忽略任何 falsy 值,所以这对你有用。

if(variable && variable2 && variable3)
以下值在JS中始终为假值:
false.
0 (zero)
"" (empty string)
null.
undefined.
NaN (a special Number value meaning Not-a-Number!)

更新:

如果有这样的情况,即使值为0,你仍想执行if块,你需要添加一个额外的检查,即0或其他一些值。

if((variable || variable === 0) && (variable2 || variable2 === 0) && (variable3 || variable3 === 0))

但是如果 var = 0,它也会被视为 false。 - pmiranda
2
似乎对测试 false 也有效?(这可能会为某人节省 2 分钟):var variable = ""; var variable2 = ""; var variable3 = ""; if (!variable && !variable2 && !variable3) { console.log("hi") } - user1063287

18

如果您在意IE的支持(IE9 +),您可以使用以下解决方案。

您可以使用Array.prototype.some()。简而言之,此数组方法将在数组中的任何元素满足某个条件时返回true。此条件将为el == null,这样做的原因是undefined == nullnull == null都会得到true

有关更多信息,请参见此stackoverflow帖子

在JavaScript比较中应该使用哪个等于运算符(== vs ===)?

Array.prototype.some()浏览器支持(截至撰写本文为93%)在这里

var a = 5;
var b = null;
var c = undefined;

if ( [a,b,c].some(el => el == null) ) {          
  console.log("You f*d up")
}

你也可以使用Array.prototype.includes()

在此处查看支持情况(截至撰写本文时,有 93% 的支持率)这里

var a = 5;
var b = null;
var c = undefined;
   
 if ( [a,b,c].includes(undefined) || [a,b,c].includes(null) ) {          
   console.log("You f*d up")
 }

如果您想要良好的浏览器支持,并且不介意使用外部库,请使用lodash

var a = 5;
var b = null;
var c = undefined;

if ( _.some([a,b,c], el => _.isNil(el)) ) {
  console.log("You f*d up")
}
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>


9
如果您的变量包含一些 真值,例如字符串,并且在您的条件中被视为正数,则可以使用 Array.prototype.every() 进行简单的检查...
if (![var1, var2, var3].every(Boolean)) {
     throw new exc;
}

这将检查每个变量是否具有真值。


4

我猜想你是在检查真值?如果是这样,你可以这么做:

变量名 && 另一个变量名 && 第三个变量名


它不会返回true,而是最后一个变量值(如果所有变量都是有效的值)。有什么方法可以得到true吗? - Sunil Garg
将表达式转换为布尔值 Boolean(variable && variable2)!!(variable && variable2) - Lee

0

0

长手 -

 if (var1 !== null || var1 !== undefined || var1 !== '') {
   let var2 = var1;
 }

简写 -

 const var2 = var1  || '';

0
let variable null;
let variable2 undefined;
let variable3 'string';
let variable4 '';
let variable5 true;
let variable6 false;
let variable7 0;
let variable8 1;

使用过滤函数验证多个值。在这个例子中,我们可以期望返回true,因为(variable, variable2, variable4, variable6, variable7)的计数将会是5。

if([variable, variable2, variable3, variable4, variable5, variable6, variable7, variable8]
  .filter(q=>!q).length > 0) {
   //take action
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接