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如果变量的值为0、NaN、空字符串或false,则该测试也将成功。
变量不能同时为null和undefined。但是,您问题的直接答案是:
一个=,而不是两个。
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;