如何判断变量是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解释器会停止执行。
如何判断变量是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
为真,因此上面的代码将捕获 null
和 undefined
。
const y = undefined; y == null;
它应该返回 true
。 - Serafy
是常量,但是你进行的比较却是 abc
(而不是 y
)。当我在Chrome和Firefox上通过console.log(y == null);
测试y
时,得到的结果是true
。如果你遇到了错误,那么可能是因为你尝试使用赋值运算符=
而不是比较运算符==
,这会导致错误,因为const
不能被重新赋值。 - Pshemoundefined !== null
--> true
undefined == null
--> true - d.popov同时捕获null
和undefined
的标准方法如下:
if (variable == null) {
// do something
}
--这与更加详细但不够简洁的表述完全等效:
if (variable === undefined || variable === null) {
// do something
}
在编写专业的JS时,类型相等和==
与===
的行为被视为理所当然。因此,我们使用==
并仅与null
进行比较。
建议使用typeof
的评论是错误的。是的,我上面的解决方案会在变量不存在时引发ReferenceError。 这是一件好事。 这个ReferenceError是可取的:它将帮助您在发布代码之前找到并修复错误,就像其他语言中的编译器错误一样。如果您正在处理无法控制的输入,请使用try
/catch
。
您的代码中不应该有任何对未声明变量的引用。
undefined
的值,就像任何已声明但未初始化的变量一样,例如 var someVar;
。因此,你的论点并不成立。 - chiliNUTif (variable)
测试真值。它将同时除去false
、 0
、 NaN
和空字符串以及null
和undefined
,因此它不是正确的答案。至于instanceof
,如果问题是“这个变量是null
还是undefined
?”(也许您希望该值为null
或undefined
...)您不能用instanceof
来确定,除非通过检查该值不是任何其他类型的实例,这很疯狂。因此,在这里也是错误的答案。 - temporary_user_name综合以上答案,似乎最完整的答案应该是:
if( typeof variable === 'undefined' || variable === null ){
// Do stuff
}
这适用于任何未声明或已声明但明确设置为null或undefined的变量。对于实际具有非空值的已声明变量,布尔表达式应该评估为false。
typeof
是一个运算符而不是函数,所以它不需要括号,但我仍然感谢括号——因为它可以提高代码的可读性。 - user664833variable == null
。 - Rogueif( typeof variable === 'undefined' ){}
,因为添加 null 部分会抛出 ReferenceError。 - Uriahs Victorif (variable == null) {
// Do stuff, will only match null or undefined, this won't match false
}
undefined
等于null
。 - Chuck/*jshint eqnull:true */
,JSHint将停止警告您对== null
的使用。 - Web_Designer==
是有问题的参考文献吗?这个回答中使用强制类型转换的if(variable == null)
完全符合我的理解... - Ben Astonif (typeof EmpName != 'undefined' && EmpName) {
如果值不是以下值之一,则将求值为true:
null
undefined
NaN
空字符串("")
0
false
if (EmpName)
相同。如果是 undefined
,它已经是假值了。 - Rudyvar EmpName; if (EmpName)
。 这里变量被定义但没有赋值。 - hungerstartypeof
更安全。如果它是SaaS,则没有问题,如果它是自托管的应用程序,则修复错误就会变得混乱。 - Thamaraiselvam可能最简单的方法是:
if(EmpName == null) { /* DO SOMETHING */ };
function check(EmpName) {
if(EmpName == null) { return true; };
return false;
}
var log = (t,a) => console.log(`${t} -> ${check(a)}`);
log('null', null);
log('undefined', undefined);
log('NaN', NaN);
log('""', "");
log('{}', {});
log('[]', []);
log('[1]', [1]);
log('[0]', [0]);
log('[[]]', [[]]);
log('true', true);
log('false', false);
log('"true"', "true");
log('"false"', "false");
log('Infinity', Infinity);
log('-Infinity', -Infinity);
log('1', 1);
log('0', 0);
log('-1', -1);
log('"1"', "1");
log('"0"', "0");
log('"-1"', "-1");
// "void 0" case
console.log('---\n"true" is:', true);
console.log('"void 0" is:', void 0);
log(void 0,void 0); // "void 0" is "undefined"
以下是关于==
的更多细节(来源在这里)
BONUS: 为什么===
比==
更清晰(请看agc的回答)
if(var)/if(!var)
将会执行 true/false
值的代码。而 if(var == null)
对于那些值为 null
的变量永远不会执行代码... - Kamil KiełczewskijQuery的 attr()
函数返回一个空字符串或实际值(从不返回null
或undefined
)。仅当选择器未返回任何元素时才返回undefined
。
因此,您可能希望针对空字符串进行测试。或者,由于空字符串、null和undefined都是假值,您可以只需执行以下操作:
if (!EmpName) { //do something }
ReferenceError: EmpName未定义
。 - Eran Medanundefined
。例如,一个没有src
的img
将为$('img').attr('src');
返回undefined
。 - codinghandsif(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
视为非空。
{}
。这是一个常见而愚蠢的语言问题,但我忘记了它。我的所有搜索都显示undefined或null值的答案,或者松散相等比较(==),但不是严格相等(===)或等效的。然后,在您排名第-1的答案中,就在页面的最底部(在我点赞之前)找到了我所寻找的答案。Object.keys(obj).length < 1
或者也许是===0,假设它永远不会是-1。无论如何,点赞到0,woo。:p - user2895783==
改为===
,这样这个函数就会合理一些。 - Ben McIntyre最简单最易懂的方法:
if(!EmpName ){
// DO SOMETHING
}
如果EmpName是以下情况之一,则此代码将返回true:
如果您想要检查的变量是全局变量,请执行以下操作:
if (window.yourVarName) {
// Your code here
}
即使 yourVarName
变量不存在,使用这种检查方式也不会抛出错误。
if (window.history) {
history.back();
}
window
是一个对象,它包含所有全局变量作为其属性,在 JavaScript 中,尝试访问不存在的对象属性是合法的。如果 history
不存在,则 window.history
返回 undefined
。由于 undefined
是假值,因此在 if(undefined){}
块中的代码将不会运行。
null
或 undefined
,也无法在 JavaScript 在浏览器外部(如 Node.js 中)运行时使用。此外,它会将设置为 0
、false
或 ''
的全局变量与未声明或 undefined
或 null
的变量视为相同,这通常是可以接受的。 - Mark Amery