如何验证JavaScript中对象的存在?

以下工作:

if (!null)
   alert("GOT HERE");

但是这会抛出一个错误:

if (!maybeObject)
   alert("GOT HERE");

错误:

maybeObject没有定义。


当前回答

0和null是隐式指针。如果你不做算术,比较,或打印'0'到屏幕上,就没有必要实际输入它。其隐含的。就像隐含的那样。出于同样的原因,Typeof也不是必需的。手表。

if(obj) console.log(“exist”);

我没有看到request for a not或else,因为它不包括。就像我喜欢不符合问题的额外内容一样。让我们保持简单。

其他回答

如果这是一个全局对象,你可以使用If (!window.maybeObject)

你可以用"typeof"。

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

我刚刚测试了上面的typeOf例子,没有一个适合我,所以我用了这个:

btnAdd = document.getElementById("elementNotLoadedYet"); if (btnAdd) { btnAdd。textContent = "Some text here"; }其他{ 警报(“没有发现!”); }

两种方式。

用于局部变量的Typeof

你可以使用typeof测试本地对象:

if (typeof object !== "undefined") {}

全局变量窗口

你可以通过检查window对象来测试全局对象(在全局作用域中定义的对象):

if (window.FormData) {}

这里有很多半真半假的东西,所以我想把一些事情说清楚。

实际上,您无法准确地判断变量是否存在(除非您想将每两行都包装成一个try-catch块)。

原因是Javascript有一个臭名昭著的值undefined,这并不意味着变量没有定义,或者它不存在undefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

所以一个存在的变量和另一个不存在的变量都可以报告给你未定义的类型。

至于@Kevin的误解,null == undefined。这是由于类型强制,这也是为什么Crockford一直告诉那些不确定这类事情的人总是使用严格的相等运算符===来测试可能的假值的主要原因。Null !== undefined给出了您可能期望的结果。请注意,foo != null是检查变量是否为undefined或null的有效方法。当然,你可以明确,因为这有助于可读性。

如果你限制这个问题来检查一个对象是否存在,typeof o == "object"可能是一个好主意,除非你不考虑数组对象,因为这也会被报告为对象的类型,这可能会让你有点困惑。更不用说typeof null也会给你一个对象,这是错误的。

你真正应该小心typeof、undefined、null、unknown和其他谜题的原始区域是宿主对象。他们不可信。他们几乎可以随心所欲地做任何肮脏的事情。所以要小心使用它们,如果可以的话检查它们的功能,因为这是使用一个可能根本不存在的功能的唯一安全方法。