关于jquery:如何检查javascript中的变量是否同时为空和/或未定义

How to check if a variable is both null and /or undefined in JavaScript

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Detecting an undefined object property in JavaScript
How to determine if variable is 'undefined' or 'null'
Is there a standard function to check for null, undefined, or blank variables in JavaScript?

在我的代码中,我有一个看起来像

1
2
if (variable !== null && variable !== undefined) {
}

但不是分两步完成,即检查它是否未定义,是否为空。是否有一步检查可代替此检查?

  • 如果你担心的话,这并不是在减慢你的代码速度。
  • 使用函数:function isNullOrUndefined(variable) { return variable === null || variable === undefined; }
  • @如果你将一个未定义的变量作为参数传递给一个函数,你会得到一个错误。
  • @DQhendricks这不是真的,我不认为,当然,它可能会导致函数内部的错误。
  • @您当然可以编写一个函数,但是!=操作符已经处理了这个问题。
  • @很有意义是的。只是那个疯狂的想法…
  • @很明显这是真的。运行这个并查看日志中弹出的内容…jfiddle.net/8jfbt
  • @DQhendricks,但如果将baz设置为undefined,则不会出错。因此,它只在代码是正确的前提下起作用。
  • @DQhendricks啊,好吧,"未定义变量"和"值为undefined的变量"之间有区别……这是你的小提琴的改进版
  • 是的,@pointy我的观点仍然有效。如果要测试变量是否已定义,则不能使用函数。
  • @DQhendricks任何读取未声明或未缩写变量的尝试都会抛出一个错误(typeof除外),包括在op中。
  • @ RobG。if (typeof foo === 'undefined') {
  • 最好的方法是如果(!!!!变量)//做点什么
  • @msroot如果变量的值为0NaN、空字符串或false,则该测试也将成功。


变量不能同时为nullundefined。但是,您问题的直接答案是:

1
if (variable != null)

一个=,而不是两个。

javascript规范中的"抽象相等比较算法"中有两个特殊的子句,一个是null,另一个是undefined,结果是==true!=false。因此,如果变量的值是undefined,则不是!= null,如果不为空,则显然不是!= null

现在,无论是作为函数参数的var还是作为全局上下文的属性的let,没有定义标识符的情况都是不同的。对此类标识符的引用在运行时被视为错误。您可以尝试引用并捕获错误:

1
2
3
4
5
6
var isDefined = false;
try {
  (variable);
  isDefined = true;
}
catch (x) {}

不过,我个人认为这是一种有问题的做法。对于基于存在或不存在其他库或类似情况而可能存在的全局符号,可以测试window属性(在浏览器javascript中):

1
var isJqueryAvailable = window.jQuery != null;

1
var isJqueryAvailable ="jQuery" in window;

  • 虽然这是正确的,并回答了OP的问题,但我认为原始代码更清楚。不是每个人都会认识到x != null!x之间的细微差别。
  • @robg好吧,我通常不给"每个人"访问我的源代码存储库的权限。—)我认为对于javascript编码人员来说,了解这样的事情是很重要的,换句话说。
  • 伟大的回答!γ
  • 答案很好,应该被认为是最好的。
  • 它不适用于未定义的变量
  • @你到底什么意思?什么不起作用?以什么方式?
  • @变量未定义时指向
  • @如对原始问题的注释所述,对根本不存在的变量进行测试不是本代码的目的。这种情况——使用一个未定义的变量——仅仅是一个错误,并在"严格"模式下标记为错误。
  • @尖刻的谢谢,我明白了。


您可以用自己的函数包装它:

1
2
3
4
function isNullAndUndef(variable) {

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

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