检查jQuery中是否未定义和null

K G*_*oll 4 javascript jquery ternary-operator

检查是否为null或未定义以及是否应该使用!==!="未定义"或未定义时,我有点困惑.

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

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

谢谢

the*_*tem 11

一般来说,保持简单.

要检查undefined,请使用:

foo === undefined
foo !== undefined
Run Code Online (Sandbox Code Playgroud)

要检查null,请使用:

foo === null
foo !== null
Run Code Online (Sandbox Code Playgroud)

要同时检查,请使用:

foo == null
foo != null
Run Code Online (Sandbox Code Playgroud)

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

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

var c = targ === "_blank" ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

或者你可以通过强制boolean转换为number:

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

var c = +(targ === "_blank");
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*eph 5

  • 双方nullundefined都"falsy"的价值观,因此,他们可以像他们布尔值检查.因此,有没有意义的比较,null以及undefined除了在这里你需要知道,如果他们是这样的值某些情况.

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

  • &&,如果一个前述它是"falsy"在条件不评估以下条件.

  • 你甚至不需要jQuery,因为this你的DOM对象(大概是一个<a>)而你正试图获得target属性:

到底:

var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清,使用null和undefined的'falsy'属性并不总是最好的.这是因为诸如零和空字符串之类的值也被认为是假的,但在许多情况下可能允许值.因此,如果您处于某种情况,并且不允许使用未定义的值,但允许使用零和空字符串(以及其他假值),则需要显式检查null和undefined. (4认同)