我一直在研究一个 javascript 库,我有很多像这样的冗余检查:
if(typeof foo !== "undefined" && foo !== null)
所以,我想创建一个函数,作为这个笨重检查的快捷方式。所以我想到了这个:
function isset(a)
{
return (typeof a !== "undefined" && a !== null) ? true : false;
}
但是,由于该值可能是未定义的,并且它试图使用一个可能 undefined variable ,结果证明它是无用的。
有没有一种方法可以在不必扩展原生原型(prototype)的情况下实现这一点?
最佳答案
这实际上取决于您所说的 undefined
是什么意思。
<强>1。你的意思是变量不存在。
在这种情况下,你想要的是不可能的。 typeof
是一个运算符,因此具有您无法使用该语言模拟的神奇行为。如果您尝试将一个不存在的变量传递给您的函数,它将抛出一个 ReferenceError
。
(请参阅下面的解决方法。)
<强>2。您是说该变量的值为 undefined
,但确实存在。
在这种情况下,您的函数可以解决问题——尽管它可以简化为以下内容:
function isset(variable) {
return variable != null;
}
如果变量是undefined
或null
,此函数将返回false
。它利用了 JavaScript 中的 undefined == null
这一事实。当然,对于这么短的函数,有人可能会争辩说根本不需要该函数。
回想一下,声明 的变量默认有一个值 -- undefined
。
您的函数名称表明您指的是案例 #1。我不知道你在写什么样的库,但我无法想象在库中你需要检查变量是否存在的情况 exists,尽管我可以肯定地想到很多可能性对于案例 #2。
如果情况 #1 是必要的,请记住您可以重新声明变量而不更改它们的值:
a = 1; // pretend this was set somewhere higher up in the code
var a; // this does not change the value of `a`
如果在使用 isset
之前重新声明变量,则可以避免 ReferenceError
问题。但是,您将无法判断代码是否已经声明了变量;您只能判断他们是否没有将其分配给其他值。
关于封装检查变量是否未定义的Javascript函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632293/