检查jQuery中的未定义和空值
Posted
技术标签:
【中文标题】检查jQuery中的未定义和空值【英文标题】:Checking if undefined and null in jQuery 【发布时间】:2013-02-06 09:38:38 【问题描述】:在检查 null 或 undefined 以及是否应该使用 !==
或 !=
和“未定义”或未定义时,我有点困惑。
这是我正在处理的一些代码。我的 null/unudefined 等哪里出了问题?
var c = (jQuery(this).prop("target") != null && jQuery(this).prop("target") != undefined && jQuery(this).prop("target").toLowerCase() == "_blank") ? 1 : 0;
谢谢
【问题讨论】:
您遇到错误了吗? 您绝对必须致电toLowerCase()
吗?
@AshReva 不完全是这样,但作为试图找出错误的一部分,我正在检查这样的事情,我不是 100% 的。
【参考方案1】:
一般来说,保持简单。
要检查undefined
,请使用:
foo === undefined
foo !== undefined
要检查null
,请使用:
foo === null
foo !== null
要同时检查任何一个,请使用:
foo == null
foo != null
无论如何,请将您的.prop()
存储到一个变量中以保持其干净。但在你的情况下,如果它等于"_blank"
,那么你就知道它不是null
或undefined
,所以:
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
。
【讨论】:
这是一个很好的解释。谢谢。 @acowley:不客气。不要担心那些告诉你做一些有趣的事情的人,比如typeof foo === "undefined"
。这是一种令人困惑、容易出错且不必要的语法。永远不要创建一个名为 undefined
的变量,你会没事的。
不,先生。在问这里之前,我正在考虑沿着typeof
路径前进。干杯。【参考方案2】:
null
和 undefined
都是“假”值,因此可以像检查布尔值一样检查它们。因此,与null
和undefined
相比是没有意义的,除非在某些情况下您需要知道它们是否是这样的值。
比较时最好使用严格比较(如===
,!==
等)
如果条件中的&&
前面的条件是“假的”,则它不会评估后面的条件。
You don't even need jQuery 因为this
是您的DOM 对象(可能是<a>
)并且您正在尝试获取target
属性:
最后:
var c = (this.target && this.target.toLowerCase() === "_blank") ? 1 : 0;
【讨论】:
只是为了澄清,使用 null 和 undefined 的“虚假”属性并不总是最好的。这是因为诸如零和空字符串之类的值也被认为是虚假的,但在许多情况下可能是允许值。因此,如果您的情况是 null 并且不允许使用未定义的值,但允许使用零和空字符串(以及其他虚假值),则需要显式检查 null 和未定义。【参考方案3】:这是检查未定义的最佳方法:
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;
【讨论】:
【参考方案4】:因为 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()
用于selectedIndex
或tagName
等属性。
【讨论】:
我认为 OP 正在检查“目标”属性的有效性,以便他们可以对其调用toLowerCase
方法,否则其他两个检查毫无意义。【参考方案5】:
不要仅仅为了检查一个值而获取相同的属性 3 次。
var c = 0;
var prop = $(this).prop("target");
if(prop && prop.toLowerCase() === "_blank") c = 1;
【讨论】:
【参考方案6】:我得到了这样的东西,与你的问题无关,但会帮助你
var targ = jQuery(this).prop("target").toLowerCase();
现在如果你想检查 targ 是 null 还是 undefined
var c = (!targ || "") ? 1 : 0
希望对你有帮助
【讨论】:
【参考方案7】:在 javascript 中,您不需要显式检查变量是否为 null 或未定义,因为:
null 或 undefined 在布尔表达式中返回 false。
JS 表达式从左到右计算。所以对于一个 || b,如果 a 为假,则只评估 b。但如果 a 为真,则不会检查 b。同样,对于 a && b,如果 a 为 false,则不会计算 b。
因此,if (a != null) "do something" 可以写成 if (a) "do something" 或简单的 && "do something"。
同理,当值设置为null或undefined时,可以用来设置默认值:
function someFunction(age)
var age= age|| 18;
参考:https://codereview.stackexchange.com/questions/472/usage-of-the-ternary-operator-with-functions-listening-to-click-events
【讨论】:
以上是关于检查jQuery中的未定义和空值的主要内容,如果未能解决你的问题,请参考以下文章