如何确定变量是'undefined'还是'null'?

如何确定变量是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是真的,所以上面的代码会同时捕获nullundefined

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

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

– 这是100%相当于更明确,但不那么简洁:

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

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


再次编辑

建议使用typeof的评论是错误的。 是的,如果变量不存在,我上面的解决方案将导致ReferenceError。 这是一件好事。 这个ReferenceError是可取的:它会帮助你找到你的错误,并在你发布代码之前修复它们,就像其他语言的编译器错误一样。

你不应该在你的代码中引用未声明的变量。

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

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

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

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

 if (typeof EmpName != 'undefined' && EmpName) { 

如果值不是:则评估为真:

  • 空值

  • 未定义

  • 为NaN

  • 空字符串(“”)

  • 0

更新:

检查undefined带来更多的信心

jQuery attr()函数返回一个空字符串或实际值(并且永远不会nullundefined )。 唯一一次返回undefined是当你的选择器没有返回任何元素。

所以你可能要测试一个空白的字符串。 或者,由于空字符串,null和undefined都是false-y,所以可以这样做:

 if (!EmpName) { //do something } 

我喜欢用这个:

 if (!!variable) { //do something } 

它捕获nullundefined

如果你想检查的变量是全局的,那么

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

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

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

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

这是如何工作的:

window是一个保存所有全局变量作为属性的对象,在JavaScript中尝试访问一个不存在的对象属性是合法的。 如果history不存在,则window.history返回undefinedundefined是falsey,所以if(undefined){}块中的代码将不会运行。

我来写我自己的功能… 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

考虑undefinednullfalse0.0"0" {}[]为空。

"0.0"NaN" "true被认为是非空的。

由于您使用的是jQuery ,因此您可以通过使用单个函数来确定变量是未定义的还是其值为空。

 var s; // undefined jQuery.isEmptyObject(s); // will return true; s = null; // defined as null jQuery.isEmptyObject(s); // will return true; // usage if(jQuery.isEmptyObject(s)){ alert('Either variable: s is undefined or its value is null'); }else{ alert('variable: s has value ' + s); } s = 'something'; // defined with some value jQuery.isEmptyObject(s); // will return false; 

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

 if (object) { Somecode} 

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

jQuery检查元素不为空

 var dvElement = $('#dvElement'); if (dvElement.length > 0) { //do something } else{ //else do something else } 

最好的办法:

 if(typeof variable==='undefined' || variable===null) { /* do your stuff */ } 
 var i; if(i == null || typeof i == 'undefined'){ console.log(i,'i is undefined or null') }else{ console.log(i,'i has some value') } 

我在Chrome控制台上运行这个测试,使用(void 0)你可以检查undefined

 var c; undefined if(c === void 0)alert(); // output = undefined var c = 1; // output = undefined if(c === void 0)alert(); // output = undefined // check c value c // output = 1 if(c === void 0)alert(); // output = undefined c = undefined; // output = undefined if(c === void 0)alert(); // output = undefined 

您可以通过简单的使用typeof来检查值是未定义的还是null:

 if(typeof value == 'undefined'){ 

调用typeof null将返回“object”值,因为特殊值null被认为是空对象引用。 通过版本5的Safari和通过版本7的Chrome有一个怪异的地方,正则表达式的调用类型返回“功能”,而所有其他浏览器返回“对象”。

 var x; if (x === undefined) { alert ("only declared, but not defined.") }; if (typeof y === "undefined") { alert ("not even declared.") }; 

您只能使用第二个:因为它将检查定义和声明

要测试一个变量是否为空或未定义,我使用下面的代码。

  if(sVal === '' || sVal === null ||typeof sVal === 'undefined'){ console.log('variable is undefined or null'); } 

这是一个非常古老的问题,但我仍然认为测试这两个条件的最好/安全的方法是将值赋给字符串:

 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 } 

if(x==null)在javascript中是不好的想法,用"=="判断可能会导致意外的类型强制,不能被coffee-script读取, 在条件判断中从不使用“==”或“!=” !

if(x)会更好,但是0和“” ,则将被视为 ,不等于"!= null"

在这里输入图像描述

https://www.w3schools.com/js/js_best_practices.asp

我的5美分捐款的具体情况:

 var bUndef = ($('#' + selectedNodeID).position() === undefined) if (bUndef) .... 

该属性是undefided不是元素!