如何在JavaScript中检查变量是否为null和/或undefined

41

如果你担心的是它会减慢你的代码,那么它并不会。 - Blazemonger
@VisioN 如果你将一个未定义的变量作为参数传递给函数,你会得到一个错误。 - dqhendricks
@dqhendricks——任何尝试读取未声明或未初始化的变量都会抛出错误(除了typeof),包括在OP中。 - RobG
最好的方法是:if (!!!variable) { //做某事 } - msroot
@msroot 如果变量的值为 0, NaN, 空字符串或 false,那么该测试也将成功。 - Pointy
显示剩余10条评论
2个回答

64
一个变量不能同时为nullundefined。然而,对于你的问题直接的答案是:
if (variable != null)

一个 =,而非两个。

在 JavaScript 规范的“抽象相等比较算法”中,有两个特殊条款专门针对一个操作数为null且另一个操作数为undefined的情况,结果为==时为true,而!=则为false。因此,如果变量的值是undefined,它就不是!= null,如果它不是null,显然也不是!= null

现在,标识符完全未定义的情况(既不是varlet,也不是函数参数或全局上下文的属性)是不同的。在运行时,对这种标识符的引用被视为错误。你可以尝试引用并捕获错误:

var isDefined = false;
try {
  (variable);
  isDefined = true;
}
catch (x) {}

我个人认为这是一个值得怀疑的做法。对于可能存在或不存在的全局符号,基于某些其他库的存在或缺失,或者类似情况,您可以测试浏览器JavaScript中的window属性:

var isJqueryAvailable = window.jQuery != null;

或者

var isJqueryAvailable = "jQuery" in window;

1
@RobG 嗯,我通常不会给“所有人”访问我的源代码存储库的权限 :-) 我认为对于JavaScript程序员来说,了解这些东西是相当重要的。 - Pointy
这是一个非常出色的答案,本应该被评为最佳答案。 - toni rmc
@ParthChavda 你具体是什么意思?哪里出了问题?以什么方式? - Pointy
当变量未定义时,@Pointy。 - Parth Chavda
1
正如在原问题的评论中所指出的那样,测试变量是否根本不存在并不是此代码的意图。这种情况 - 使用未定义的变量 - 只是一个错误,并在“严格”模式下标记为错误。 - Pointy
显示剩余3条评论

7
您可以将其包装在自己的函数中:
function isNullAndUndef(variable) {

    return (variable !== null && variable !== undefined);
}

2
或者至少return (variable !== null && variable !== undefined);这样说吧!这就像是说if(true) { return true; } return false; - jeremy

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