检查jQuery中是否未定义和null

检查是否为null或未定义以及是否应该使用时,我有点困惑!==!=和“undefined”或undefined。

这是我正在研究的一些代码。 我的null / unudefined等在哪里出错了?

 var c = (jQuery(this).prop("target") != null && jQuery(this).prop("target") != undefined && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0; 

谢谢

  • nullundefined都是“falsy”值,因此可以检查它们是否为布尔值。 因此,与nullundefined相比没有任何意义,除非您需要知道它们是否是这样的值。

  • 比较时,最好使用严格的比较(如===!==等)

  • 条件中的&&如果前面的条件是“falsy”,则不会评估以下条件。

  • 你甚至不需要jQuery,因为this是你的DOM对象(大概是 ),你试图得到target属性:

到底:

 var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0; 

一般来说,保持简单。

要检查undefined ,请使用:

 foo === undefined foo !== undefined 

要检查null ,请使用:

 foo === null foo !== null 

要同时检查,请使用:

 foo == null foo != null 

无论如何,将.prop()存储到变量中以保持其清洁。 但在你的情况下,如果它等于"_blank" ,那么你知道它不是nullundefined ,所以:

 var targ = jQuery(this).prop("target").toLowerCase(); var c = targ === "_blank" ? 1 : 0; 

或者你可以通过将boolean强制转换为number来缩短它:

 var targ = jQuery(this).prop("target").toLowerCase(); var c = +(targ === "_blank"); 

最后两个解决方案是安全的,因为.prop()将始终返回一个string

这是检查undefined的最佳方法:

 if(typeof variable_here != 'undefined'){ // your code here. }; 

这是检查null的最佳方法:

 if(variable_here !== null){ // your code here. }; 

所以你的代码应该是这样的:

 var c = (jQuery(this).prop("target") !== null && typeof jQuery(this).prop("target") !== 'undefined' && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0; 

由于undefined是变量类型,因此使用typeof

 var c = ( $(this).attr("target") != NULL && typeof $(this).attr("target") != "undefined" && $(this).attr("target").toLowerCase() == "_blank" ) ? 1 : 0; 

但是,我认为你只需要最后一次检查。 目标是"_blank"c需要为1 ,否则为0 。 如果target是否设定真的很重要吗?

另外,使用attr()方法获取属性,因为prop() if用于selectedIndextagName等属性。

不要只检查一个值3次获得相同的属性。

 var c = 0; var prop = $(this).prop("target"); if(prop && prop.toLowerCase() === "_blank") c = 1; 

我有这样的东西,这与你的问题无关,但会帮助你

 var targ = jQuery(this).prop("target").toLowerCase(); 

现在,如果要检查targ是null还是未定义

  var c = (!targ || "") ? 1 : 0 

希望对你有帮助