我该如何确定一个变量是“未定义”还是“空值(null)”?

2663

如何判断变量是undefined还是null

我的代码如下:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};

<div id="esd-names">
  <div id="name"></div>
</div>

但是当我这样做时,JavaScript解释器会停止执行。


可能是如何在JavaScript中检查空字符串?的重复问题。 - T.Todua
使用内置的空值合并运算符(??) - Dennis Nolan
@DennisNolan 这个问题是在2010年提出的。 - not my real name
如果(EmpName == 'undefined')将不会测试EmpName是否未定义,它将测试字符串“undefined”,因此去掉那些单引号:如果(EmpName == undefined)//因为没有引号的'undefined'是未定义的或者更简单的如果(!EmpName){ // 做一些事情 }; - user7394313
35个回答

0

我仍然认为测试这两个条件的最佳/安全方法是将值转换为字符串:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}

你能解释一下为什么你相信这是执行测试的“最佳/安全方式”吗? - sadmicrowave
由于转换始终返回“标准化”字符串(即[object Undefined]),因此您不会因测试虚假值而陷入麻烦。这只是基于我在真/假值方面的经验得出的观点。 - n1kkou
谢谢你的解释。我没有批评,这是一个有趣的答案,我只是希望你能为其他人提供一些解释,说明为什么这种方法潜在地优于其他方法。 - sadmicrowave
没问题!我曾经遇到很多这种比较类型的问题,直到现在,我发现这是处理这个问题最有用的方法。 - n1kkou

-2

最好的方式:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

7
@jkindwall已经在2013年10月11日提供了这个精确的解决方案。https://dev59.com/z3E85IYBdhLWcg3wtV1T#19323555 这篇只包含代码的帖子是完全无用的,因为它没有为页面添加任何新价值。事实上,它会增加页面冗余并浪费研究人员阅读它的时间。请删除此答案。 - mickmackusa

-4
您可以通过简单地使用typeof来检查值是否未定义或为null:
if(typeof value == 'undefined'){

请参考之前回答(https://dev59.com/z3E85IYBdhLWcg3wtV1T#21273362)中有关typeof的注释。 - Alex
4
这是不正确的。不能捕获“null”。我不明白为什么一个问题已经在很多年前得到了正确和完整的答案,现在却提供了新的、不正确的答案。你觉得当前的答案有哪些不足之处吗? - temporary_user_name

-5

if(x==null) 在 JavaScript 中是一个不好的想法。使用 "==" 进行判断 - 它可能会导致意外的类型转换,并且 CoffeeScript 无法读取, 决不要在条件判断中使用 "==" 或 "!="!

if(x) 更好一些,但要小心处理 0 和 ""。它们将被视为false,而不是等于方法"!= null"true

Enter image description here

请查看JavaScript最佳实践


4
这完全是错误的,任何专业级框架或软件的简要研究都可以在几秒钟内证实。在JS中,使用==比较null是捕获nullundefined标准方法。在这种特定情况下,使用==进行类型强制转换不会存在风险,事实上正在利用它来同时捕获nullundefined。请在决定回答已经在多年前得到令人满意的解决方案的问题之前,花更多时间学习这门语言,以免提供错误和误导性的答案。 - temporary_user_name
避免使用“==”。一切都在不断变化,我不同意你的看法,@Aerovistae。 - Albert.Qing
3
你不是在和意见不合,你与整个JavaScript界不合。让我们明确一点。 - temporary_user_name
嗯,我避免使用==来进行比较,除了== null这种情况,因为它很简洁。 - Константин Ван

-13

最简单的答案:

if(!EmpName){
  // DO SOMETHING
};

这样,您还会针对诸如0''之类的假值进行操作,而我们只想针对nullish/undefined值进行操作。 - Tzahi Leh

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