在JavaScript中是否有标准函数来检查null、undefined或空变量?

3053

是否有一种通用的JavaScript函数,可以检查变量是否具有值,并确保它不是undefinednull?我有这段代码,但我不确定它是否涵盖了所有情况:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}

6
可能是如何在JavaScript中检查空字符串?的重复问题。 - Dour High Arch
191
提示,永远不要写成(truthy statement) ? true : false;。直接写成(truthy statement);即可。 - David Baucum
11
@GeorgeJempty并不是重复的,因为另一个答案特别提到了“字符串”,而这个问题是关于“变量”的。请注意,此处仅进行翻译,不涉及任何解释或其他内容。 - Madbreaks
4
对于这个问题的任何正确答案完全依赖于你如何定义“空白”。 - Madbreaks
7
@Jay,这并不会影响您代码的执行,只是过于冗长。就像您不会说,“Is are you hungry is true?” 而是 “Are you hungry?”所以在代码中只需使用 if (hungry) … 而不是 if (hungry === true) …。就像所有编码风格一样,这只是个人审美问题。更具体地说,对于 OP 提供的例子,他更冗长地表达了“如果它为真,则为真,如果不为真,则为假”,但如果它为真,则已经是真的。如果它为假,则已经是假的。这相当于说:“如果你饿了,那么你就饿了,如果不饿,那么你就不饿。” - David Baucum
显示剩余11条评论
47个回答

0

以下方法适用于我。请稍作修改以使其更快。

function isEmpty(obj) {
    if (!obj) return true;
    if (typeof obj == 'number') return false;
    else if (typeof obj == 'string') return obj.length == 0;
    else if (Array.isArray(obj)) return obj.length == 0;
    else if (typeof obj == 'object') return obj == null || Object.keys(obj).length == 0;
    else if (typeof obj == 'boolean') return false;
}

0

虽然这是一个老问题,但我们不能忘记应该将代码块包装起来,然后捕获错误并进行测试...

function checkup( t ){
  try{
    for(p in t){
      if( p.hasOwnProperty( t ) ){
        return true;
      }
    }
    return false;
  }catch(e){
    console.log("ERROR : "+e);
    return e;
  }
}

所以你真的不需要事先检查潜在的问题,只需捕获它,然后按照你想要的方式处理它。


-1

此函数检查空对象 {},空数组 []nullundefined 和空字符串 ""

function isEmpty(val) {
  //check for empty object {}, array []
  if (val !== null && typeof val === 'object') {
    if (Object.keys(obj).length === 0) {
      return true;
    }
  }
  //check for undefined, null and "" 
  else if (val == null || val === "") {
    return true;
  }
  return false;
}

变量val = {};
isEmpty(val) - > true
val = [];
isEmpty(val) - > true
isEmpty(undefined) - > true
isEmpty(null) - > true
isEmpty(“”) - > true
isEmpty(false) - > false
isEmpty(0) - > false

-1
  1. 你可以使用参数
  2. 成为数组的参数
  3. 过滤器

function validateAttrs(arg1, arg2, arg3,arg4){
    var args = Object.values(arguments);
    return (args.filter(x=> x===null || !x)).length<=0
}
console.log(validateAttrs('1',2, 3, 4));
console.log(validateAttrs('1',2, 3, null));
console.log(validateAttrs('1',undefined, 3, 4));
console.log(validateAttrs('1',2, '', 4));
console.log(validateAttrs('1',2, 3, null));


-1

这包括空数组和空对象

null,undefined,' ',0,[ ],{ }

isEmpty = (value) => (!value  || (typeof v === 'object' &&
   Object.keys(value).length < 1));

-2

对于我的情况,我尝试了if null,'',!variable,但它没有起作用。

请查看下面的代码以从HTML字段获取文本

var status=$(this).text(); //for example (for my case)

如果状态变量中没有值(即没有文本),我尝试将值“novalue”设置为状态变量。
以下代码有效。
if(status == false)
{
   status='novalue';
} 

当状态变量没有找到文本时,上述代码将“novalue”分配给状态变量。

我真的很想知道为什么这个回答会被踩?这将非常有帮助。如果您正在踩,请解释一下为什么您认为这个答案是错误的。 - Hriju
我认为这并没有真正回答问题。你解释了一个你遇到的问题,但在你回答之前已经有人提供了一个很好的解决方案。 - John Smith

-4

你的回答并不有用,因为它没有提供任何关于你所提到的函数的文档链接。 - Aurovrata

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