如何确定变量是未定义的还是空的?
我的代码如下:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
但如果我这样做,JavaScript解释器将停止执行。
如何确定变量是未定义的还是空的?
我的代码如下:
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( typeof variable === 'undefined' || variable === null ){
// Do stuff
}
这应该适用于任何未声明或已声明且显式设置为null或undefined的变量。对于具有实际非空值的任何声明变量,布尔表达式的计算结果应为false。
其他回答
如果要检查的变量是全局变量,请执行
if (window.yourVarName) {
// Your code here
}
即使yourVarName变量不存在,这种检查方法也不会引发错误。
示例:我想知道我的浏览器是否支持历史API
if (window.history) {
history.back();
}
工作原理:
窗口是一个对象,它保存所有全局变量作为其财产,在JavaScript中,尝试访问一个不存在的对象属性是合法的。如果历史记录不存在,则window.history返回undefined。undefined为false,因此if(undefineed){}块中的代码不会运行。
您可以通过简单地使用typeof:
if(typeof value == 'undefined'){
jQueryattr()函数返回一个空字符串或实际值(绝对不能为空或未定义)。它返回undefined的唯一时间是选择器没有返回任何元素。
因此,您可能需要针对空白字符串进行测试。或者,由于空字符串、null和undefined为false-y,您可以这样做:
if (!EmpName) { //do something }
可能最短的方法是:
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的答案)
foo==null检查应该能做到这一点,并以最短的方式解决“undefined OR null”情况。(不考虑“foo is Not declarated”的情况。)但习惯于使用3等于(作为最佳实践)的人可能不会接受它。只需看看eslint和tslint中的eqeqeq或三等于规则。。。
在这种情况下,当我们分别检查变量是否未定义或为空时,应采用显式方法,我对本主题的贡献(目前有27个非否定答案!)是使用void 0作为执行未定义检查的简短而安全的方法。
使用foo==undefined是不安全的,因为undefineed不是保留字,可以被隐藏(MDN)。使用typeof==“undefined”检查是安全的,但如果我们不关心foo是否未声明,则可以使用以下方法:
if (foo === void 0 || foo === null) { ... }