检查 JavaScript 中是否存在对象

如何验证 JavaScript 中对象是否存在?

以下工作原理:

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

但这会引发错误:

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

错误:

maybeObject未定义。


答案 1

您可以安全地对未定义的变量使用运算符。typeof

如果已为其分配任何值(包括 null),则 typeof 将返回未定义以外的内容。typeof 始终返回一个字符串。

因此

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

答案 2

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

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

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

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

因此,一个存在的变量和另一个不存在的变量都可以报告您的类型。undefined

至于@Kevin的误解,.这是由于类型强制,这也是克罗克福德不断告诉每个不确定这种事情的人总是使用严格的相等运算符来测试可能虚假的值的主要原因。 给你你可能期望的。另请注意,这可能是检查变量是否既不是 也不是 的有效方法。当然,你可以是明确的,因为它可能有助于可读性。null == undefined===null !== undefinedfoo != nullundefinednull

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

您真正应该小心的原始区域 、 、 和其他 mister 是宿主对象。他们不可信。他们几乎可以自由地做任何他们想做的肮脏的事情。因此,请小心使用它们,如果可以,请检查功能,因为这是使用甚至可能不存在的功能的唯一安全方法。typeofundefinednullunknown