如何确定变量是未定义的还是空的?

我的代码如下:

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

但如果我这样做,JavaScript解释器将停止执行。


当前回答

如果要检查的变量是全局变量,请执行

if (window.yourVarName) {
    // Your code here
}

即使yourVarName变量不存在,这种检查方法也不会引发错误。

示例:我想知道我的浏览器是否支持历史API

if (window.history) {
    history.back();
}

工作原理:

窗口是一个对象,它保存所有全局变量作为其财产,在JavaScript中,尝试访问一个不存在的对象属性是合法的。如果历史记录不存在,则window.history返回undefined。undefined为false,因此if(undefineed){}块中的代码不会运行。

其他回答

您可以使用抽象相等运算符的特性来执行此操作:

if (variable == null){
    // your code here.
}

因为null==undefined为true,所以上面的代码将捕获null和undefineed。

结合以上答案,似乎最完整的答案是:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

这应该适用于任何未声明或已声明且显式设置为null或undefined的变量。对于具有实际非空值的任何声明变量,布尔表达式的计算结果应为false。

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

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
}

您可以通过简单地使用typeof:

if(typeof value == 'undefined'){

jQuery检查元素不为空:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}