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

如何确定变量是否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 解释器将停止执行。

答案

您可以使用抽象相等运算符的品质来做到这一点:

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

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

同时捕获nullundefined的标准方法是:

if (variable == null) {
     // do something 
}

-100%等同于更明确但不太简洁的代码:

if (variable === undefined || variable === null) {
     // do something 
}

在编写专业 JS 时, 类型相等和== vs ===的行为被理解是理所当然的。因此,我们使用== ,仅与null比较。


重新编辑

暗示使用typeof的评论是完全错误的。是的,如果变量不存在,上述解决方案将导致 ReferenceError。 这是一件好事。这个 ReferenceError 是可取的:它将帮助您发现错误并在发布代码之前解决它们,就像其他语言中的编译器错误一样。如果您无法控制输入,请使用try / catch

您的代码中不应包含对未声明变量的任何引用。

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

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

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

if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}
if (typeof EmpName != 'undefined' && EmpName) {

如果值不是,则将评估为 true:

  • 空值

  • 未定义

  • N

  • 空字符串(“”)

  • 0

jQuery attr()函数返回一个空字符串或实际值(并且永远不会为nullundefined )。它唯一返回undefined时间是您的选择器未返回任何元素时。

因此,您可能要针对空白字符串进行测试。另外,由于空白字符串,null 和 undefined 为 false-y,因此您可以执行以下操作:

if (!EmpName) { //do something }

我来为此编写自己的函数。 javascript 很奇怪

几乎可用于任何东西。 (请注意,这还将检查变量是否包含任何可用 。但是由于通常也需要此信息,因此我认为值得发布)。请考虑留下笔记。

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

兼容打字稿。


编辑。此函数应该做与 PHP 的empty()函数 完全相同的操作(请参见RETURN VALUES

认为undefinednullfalse00.0"0" {} []为空。

"0.0"NaN" "true视为非空。

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

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

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

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

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

工作原理:

window是一个对象,其中包含所有全局变量作为其属性,并且在 JavaScript 中尝试访问不存在的对象属性是合法的。如果history不存在,则window.history返回undefinedundefined为 false,因此if(undefined){}块中的代码将无法运行。

最短和最容易的:

if(!EmpName ){
 // DO SOMETHING
}

如果 EmpName 为:

  • 空值
  • 未定义
  • N
  • 空的
  • 字串(“”)
  • 0

我只是有这个问题,即检查对象是否为空。
我只是用这个:

if (object) {
    // Your code
}

例如:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}