2013-02-21 37 views
3

检查是否为空或未定义,如果我应该使用!==!=和“未定义”或未定义,我有点困惑。检查jQuery中是否未定义和为空

这是我正在处理的一些代码。我在哪里出错我的空/未定义的等?

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

感谢

+0

您是否收到错误? – DevelopmentIsMyPassion 2013-02-21 06:32:25

+0

你是否绝对要调用'toLowerCase()'? – Aesthete 2013-02-21 06:38:18

+0

@AshReva完全没有,但作为尝试寻找错误的一部分,我正在检查这样的事情,我不是100%。 – acowley 2013-02-21 06:43:02

回答

5
  • 两个nullundefined是 “falsy” 值,从而可以将它们像他们布尔值检查。因此,除了需要知道它们是否为这种值的某些情况之外,与nullundefined比较没有意义。

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

  • 的条件,如果一个前述它是“falsy”不评估下列条件&&

  • You don't even need jQuery因为this是你的DOM对象(大概一个<a>),你正在试图获得target属性:

中底:

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

只是为了澄清,并不总是最好使用null和undefined的'falsy'属性。这是因为零和空字符串等值也被认为是错误的,但在许多情况下可能允许的值。因此,如果您处于某种情况,则不允许使用null和undefined值,但允许使用零和空字符串(以及其他falsy值),则需要显式检查null和undefined。 – loesak 2013-08-27 16:13:46

0

因为未定义的将是变量的类型,使用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()如果像selectedIndextagName性能。

+0

我认为OP正在检查“target”属性的有效性,以便他们可以调用'toLowerCase'方法,否则其他两个检查都是毫无意义的。 – Aesthete 2013-02-21 06:37:14

0

不要仅仅为了检查值而获得相同的属性3次。

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

在一般情况下,保持它简单。

要检查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; 

或者你可以使它更短的胁迫的booleannumber

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

var c = +(targ === "_blank"); 

最后这两个方案都是安全的,因为.prop()总是会返回一个string

+0

这是一个很好的解释。谢谢。 – acowley 2013-02-21 06:51:33

+1

@acowley:不客气。别担心那些告诉你做些有趣的事情,比如'typeof foo ===“undefined”'。这是一个令人困惑,容易出错和不必要的语法。只是不要创建一个名为'undefined'的变量,你就没问题。 – 2013-02-21 07:03:54

+0

不,先生。在我问这里之前,我正在考虑前往'typeof'路径。干杯。 – acowley 2013-02-21 14:39:42

1

这是为了检查未定义的最佳方式:

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

这是检查空的最佳方式:

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; 
0

我得到了这样的东西,与您的问题无关,但会帮助您

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

现在如果你想检查是否TARG为空或未定义

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

希望这将帮助你