封装检查变量是否未定义的Javascript函数?

标签 javascript

我一直在研究一个 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;
}

如果变量是undefinednull,此函数将返回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/

相关文章:

javascript - 在 JSX 中正确映射某些内容

javascript - 输入有效时 qTip2 验证不会消失

javascript - 无法使用 react 中的状态增加计数

javascript - 在 ThreeJS 中更新纹理贴图

javascript - 删除按钮而不编辑 Flash 文件

javascript - 如何从jquery fancy box中获取 parent 图像的src和名称?

javascript - 使用ajax和php删除表html中的行

javascript - 默认接收器中的实时时间

javascript - 限制JQuery中的追加数量

javascript - TypeError : moment(). tz 不是函数