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

我的代码如下:

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

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


当前回答

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

if(typeof value == 'undefined'){

其他回答

可能最短的方法是:

if(EmpName == null) { /* DO SOMETHING */ };

这里有证据:

功能检查(EmpName){如果(EmpName==null){return true;};return false;}var log=(t,a)=>console.log(`${t}->${check(a)}`);log('ull',null);log('未定义',未定义);日志('NaN',NaN);日志('“”,“”);日志(“{}”,{});日志('[]',[]);日志(“[1]”,[1]);日志(“[0]”,[0]);日志('[[]]',[[]]);log('true',true);日志('false',false);log('“true”',“true”);日志('“false”',“false”);log(“不确定性”,无限);log('-无限',-无限);日志('1',1);日志('0',0);日志('-1',-1);日志(“1”,“1”);日志(“0”,“0”);日志('“-1”',“-1”);//“void 0”案例console.log('---\n“true”为:',true);console.log('“void 0”为:',void 0);日志(void 0,void 0);//“void 0”为“undefined”

下面是关于==的更多详细信息(来源于此处)

奖金:为什么==比==更清楚(看看agc的答案)

编辑后的答案:在我看来,你不应该使用我下面的旧答案中的函数。相反,您应该知道变量的类型,并直接使用根据检查(例如,想知道数组是否为空?只需执行if(arr.length==0){}等)。这个答案甚至不能回答OP的问题。


我来编写自己的函数。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;
}

TypeScript兼容。


该函数应该执行与PHP的empty()函数完全相同的操作(请参见RETURN VALUES)

将undefined、null、false、0、0.0、“0”{}、[]视为空。

“0.0”、NaN、“”、true被视为非空。

通过最新的javascript更改,您可以使用新的逻辑运算符??=检查左操作数是否为空或未定义,如果为空,则分配右操作数的值。

SO,

if(EmpName == null){  // if Variable EmpName null or undefined
  EmpName = 'some value';
};

相当于:

EmpName ??= 'some value';

你可以这样做,我认为在一个条件下对同一变量进行多值检查更有效

const x = undefined;
const y = null;
const z = 'test';

if ([undefined, null].includes(x)) {
  // Will return true
}

if ([undefined, null].includes(y)) {
  // Will return true
}

if ([undefined, null].includes(z)) {
  // Will return false
}

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

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

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